Trilha de aprendizado · Nível 2 · Tutorial 2

Integrar branches locais com merge

Integrar uma branch de trabalho à branch de destino e conferir o resultado nos arquivos e no histórico local.

  • Nível: Iniciante
  • Duração: 18 min
  • 7 passos
Integrar branches locais com merge

O que você vai percorrer

  1. Definir quem recebe as mudanças Identifique a origem, o destino e qual branch deve estar ativa para receber uma integração local. 2 min
  2. Localizar as branches no histórico Leia um grafo simples para identificar a branch atual, a ponta de cada branch e os commits compartilhados. 2 min
  3. Executar um merge por avanço direto Integre uma branch local a partir do destino correto e reconheça um avanço direto pela saída do Git e pelo grafo. 3 min
  4. Reconhecer históricos divergentes Localize o ancestral comum e os commits exclusivos de cada branch e diferencie divergência de incompatibilidade entre mudanças. 2 min
  5. Integrar com um commit de merge Integre históricos divergentes com uma mensagem de merge e identifique o novo commit e seus dois pais. 3 min
  6. Conferir o resultado da integração Valide a integração combinando evidências dos arquivos, do estado do repositório e do histórico. 3 min
  7. Aplicar o fluxo completo e concluir Proponha uma integração local, justifique o tipo de merge e indique as evidências que confirmam o resultado. 3 min

O que você vai aprender

  • Distinguir a branch que receberá as mudanças da branch que será integrada.
  • Executar git merge a partir da branch de destino, com o trabalho local já registrado.
  • Reconhecer uma integração por avanço direto e uma integração que gera um commit de merge.
  • Confirmar o resultado da integração pelo estado do repositório, pelos arquivos e pelo histórico.

Antes de começar

  • Criar e alternar branches com segurança
  • Inspecionar alterações e histórico com diff e log

Passo 1 de 7

Definir quem recebe as mudanças

Identifique a origem, o destino e qual branch deve estar ativa para receber uma integração local.

Uma integração tem direção

Mais do que copiar arquivos

Merge é a integração do histórico de outra branch na branch atual. Não se trata apenas de copiar arquivos: a integração considera os commits que registram as mudanças.

Quem recebe e quem fornece

  • Destino: branch que receberá a integração. Ela deve estar ativa.
  • Origem: branch cujo histórico será integrado ao destino.

Antes de integrar, responda: qual branch precisa receber essas mudanças?

Associe os conceitos

Cada conceito no seu lugar

Associe cada termo à sua descrição.

Toque em um item e depois no par correspondente.

O destino depende da tarefa

Exemplo

Receber mudanças fora da branch principal

A tarefa é integrar o trabalho de correcao-texto à branch preparacao.

  • Origem: correcao-texto.
  • Destino: preparacao.
  • Branch que deve estar ativa: preparacao.

Dica

O nome não define o papel

O destino não precisa ser a branch principal nem ter um nome específico. Origem e destino são papéis definidos pela tarefa, não características fixas das branches.

Escolha a branch que recebe

Qual deve estar ativa?

Você está em ajuste-menu. A tarefa é integrar o histórico dessa branch à branch revisao. O repositório também tem uma branch chamada principal.

Qual decisão corresponde à tarefa?

Passo 2 de 7

Localizar as branches no histórico

Leia um grafo simples para identificar a branch atual, a ponta de cada branch e os commits compartilhados.

Exibir o histórico das branches

Antes de integrar, localize as branches no histórico com este comando. Ele apenas exibe informações; não altera o repositório.

Consultar o histórico

bash
git log --oneline --graph --all --decorate

O que muda na visualização

Além do resumo de --oneline:

  • --graph desenha as conexões entre commits, não pastas ou arquivos.
  • --all considera todas as referências disponíveis no repositório local do exercício, não apenas a branch atual.
  • --decorate exibe os nomes dessas referências junto aos commits.

Dica

Como ler as marcações

Cada * marca um commit. O nome de uma branch aparece junto ao commit para o qual ela aponta: sua ponta. A indicação HEAD -> entrega significa que entrega é a branch atual.

Localize a branch atual e as pontas

Exemplo de saída

text
* c8e4a12 (ajuste-menu) Ajusta links do menu
* b7d3f90 Adiciona menu
* a6c2e81 (HEAD -> entrega) Cria página inicial
* 95b1d70 Inicia projeto

Relacione as informações

Use as marcações do grafo para encontrar cada resposta.

Toque em um item e depois no par correspondente.

Duas branches, uma linha de histórico

Observe agora os commits compartilhados

text
* c8e4a12 (ajuste-menu) Ajusta links do menu
* b7d3f90 Adiciona menu
* a6c2e81 (HEAD -> entrega) Cria página inicial
* 95b1d70 Inicia projeto

Siga o caminho para os commits anteriores

Neste grafo, siga de cada ponta para baixo:

  • O histórico de entrega contém a6c2e81 e 95b1d70.
  • O histórico de ajuste-menu contém esses mesmos commits, mais b7d3f90 e c8e4a12.

Assim, a6c2e81 e 95b1d70 são compartilhados. As duas branches apontam para posições diferentes na mesma linha de histórico; ter duas branches não exige duas linhas no desenho.

Identifique o que as branches compartilham

Outro exemplo

text
* f4a8c20 (HEAD -> revisao-texto) Revisa título
* e3b7d19 Ajusta descrição
* d2c6e08 (publicacao) Cria apresentação
* c1d5f97 Inicia projeto

Quais commits são compartilhados?

Quais commits já fazem parte do histórico tanto de publicacao quanto de revisao-texto?

Passo 3 de 7

Executar um merge por avanço direto

Integre uma branch local a partir do destino correto e reconheça um avanço direto pela saída do Git e pelo grafo.

Preparar e executar a integração

Um destino que ficou para trás

Neste exemplo, as branches já existem. Você está em ajuste-guia, com o trabalho commitado, e deve integrá-la em entrega.

O destino entrega aponta para um commit anterior da mesma linha: ele é ancestral da ponta da origem e não tem commits exclusivos.

Histórico antes da integração

text
* 92b6f03 (HEAD -> ajuste-guia) Adicionar exemplo ao guia
* 61cd208 Descrever instalação
* 3a7f920 (entrega) Criar guia inicial

Dica

Confira antes de avançar

Execute um comando por vez. O primeiro git status deve indicar ausência de pendências. Após a troca, o segundo deve confirmar que entrega está ativa e continua sem pendências. Se houver trabalho não registrado, pare e registre-o na branch apropriada antes de continuar.

Sequência de comandos

Ative o destino com git switch e informe a origem no git merge.

bash
git status
git switch entrega
git status
git merge ajuste-guia

Organizar a execução

Qual é a sequência segura?

Você está em ajuste-guia, com o trabalho já commitado. Ordene as ações para integrar essa branch em entrega.

  1. Executar git status e confirmar que entrega está ativa e sem pendências.
  2. Executar git status em ajuste-guia e confirmar que não há pendências.
  3. Executar git switch entrega.
  4. Executar git merge ajuste-guia.

Reconhecer o avanço direto

Trecho da saída do merge

Neste exemplo, o Git informa:

text
Updating 3a7f920..92b6f03
Fast-forward

A referência avança; nenhum commit é criado

Fast-forward significa avanço direto. Como entrega já estava na mesma linha de histórico, o Git apenas move sua referência de 3a7f920 até 92b6f03, que já existia na origem.

No grafo abaixo, os três commits são os mesmos de antes. O que mudou foi a posição de entrega, que continua sendo a branch atual.

Consultar o histórico após o merge

bash
git log --oneline --graph --all --decorate

Histórico depois da integração

text
* 92b6f03 (HEAD -> entrega, ajuste-guia) Adicionar exemplo ao guia
* 61cd208 Descrever instalação
* 3a7f920 Criar guia inicial

Explicar o resultado

Por que não foi necessário um novo commit?

Explique com suas palavras por que a integração de ajuste-guia em entrega pôde ocorrer por avanço direto. Diga também de onde e para onde a referência entrega se moveu.

Escreva pelo menos 30 caracteres (0/30).

Passo 4 de 7

Reconhecer históricos divergentes

Localize o ancestral comum e os commits exclusivos de cada branch e diferencie divergência de incompatibilidade entre mudanças.

Quando as duas branches avançam

Um ponto compartilhado, dois caminhos

O commit compartilhado de onde duas linhas de trabalho partiram é o ancestral comum.

Se, depois dele, cada branch ganhou commits que não fazem parte do histórico da outra, os históricos divergiram. Há commits exclusivos tanto no destino quanto na origem.

Dica

Por que não cabe avanço direto?

Mover apenas a referência do destino para a ponta da origem deixaria os commits exclusivos do destino fora do histórico dessa branch. A integração precisa preservar as duas linhas de trabalho.

Localize a divergência

Histórico do cenário

Considere este grafo ilustrativo. A branch de destino é entrega; a origem é ajuste-contato.

plaintext
* b2c3d4e (HEAD -> entrega) Corrige descrição no README.md
| * c3d4e5f (ajuste-contato) Atualiza horário em contato.md
|/
* a1b2c3d Cria README.md e contato.md

Leia as duas linhas

Qual é o ancestral comum? Qual commit é exclusivo de cada branch? Explique por que entrega não pode simplesmente avançar para a ponta de ajuste-contato.

Escreva pelo menos 30 caracteres (0/30).

Mudanças que podem ser combinadas

Olhe também para o conteúdo

No ancestral comum do exemplo, README.md e contato.md já existiam. Depois dele, ocorreram apenas estas alterações:

Exemplo

Cada branch alterou um arquivo distinto

  • entrega: corrigiu a descrição em README.md, sem alterar contato.md.
  • ajuste-contato: atualizou o horário de atendimento em contato.md, sem alterar README.md.

Não houve exclusões, renomeações nem outras mudanças.

As duas mudanças cabem no resultado

Nesse cenário, Git consegue combinar as alterações automaticamente: manter a descrição corrigida e incorporar o novo horário.

Divergência de histórico não significa, por si só, falha na integração automática. Aqui, as mudanças são compatíveis.

Decida o que é possível

Avalie a conclusão

No cenário apresentado, a ausência de avanço direto impede Git de combinar automaticamente a correção em README.md com a atualização em contato.md.

Passo 5 de 7

Integrar com um commit de merge

Integre históricos divergentes com uma mensagem de merge e identifique o novo commit e seus dois pais.

Integrar a partir do destino

Um cenário com mudanças compatíveis

Considere um repositório de prática já preparado:

  • site é o destino e tem um commit exclusivo que altera README.md.
  • menu é a origem e tem um commit exclusivo que altera menu.html.
  • Todo o trabalho já está commitado, e as mudanças podem ser combinadas automaticamente.

Execute uma linha por vez. Só prossiga se cada git status indicar ausência de pendências. Após a troca, confirme também que a branch atual é site.

Comandos para esse cenário

bash
git status
git switch site
git status
git merge menu -m "Integrar menu em site"

A mensagem registra a integração

Nesse cenário divergente, o Git combina as mudanças e cria automaticamente um commit de merge. A opção -m fornece a mensagem desse commit no próprio comando, sem depender do editor. A mensagem escolhida deixa claro o que foi integrado e em qual destino.

Atenção

Se houver conflito, pare aqui

Se o Git informar um conflito, a integração não está concluída. Não tente forçá-la nem siga como se o commit de merge já tivesse sido criado. A resolução será abordada no próximo tutorial.

Informar a mensagem no comando

Complete a opção

Você está em site, sem pendências, pronto para integrar menu. Complete a opção que fornece a mensagem do commit de merge sem abrir o editor:

git merge menu ____ "Integrar menu em site"

Um novo commit, dois pais

O registro da união

O commit de merge passa a ser a ponta de site. Neste merge entre duas branches, ele tem dois pais, ou seja, dois commits anteriores aos quais se conecta diretamente:

  1. Primeiro pai: a ponta de site antes da integração.
  2. Segundo pai: a ponta de menu que foi integrada.

Assim, o novo commit registra a união sem substituir os commits anteriores de nenhuma das duas linhas.

Visualize a união no histórico

Após a integração bem-sucedida, execute:

bash
git log --oneline --graph --all --decorate

Dica

Siga as conexões

No grafo, procure o novo commit com duas conexões para o histórico anterior. Não se baseie apenas na mensagem: são essas ligações que mostram os dois pais e a união das linhas.

Identificar a união no grafo

Histórico após o merge

Este é um resultado ilustrativo do cenário. Os identificadores serão diferentes no seu repositório.

plaintext
*   d4e5f6a (HEAD -> site) Integrar menu em site
|\
| * c3d4e5f (menu) Adicionar link ao menu
* | b2c3d4e Atualizar instruções do site
|/
* a1b2c3d Estrutura inicial

Quais históricos foram conectados?

Identifique o commit de merge e seus dois pais, indicando qual era a ponta do destino e qual era a ponta da origem. Depois, explique por que esse resultado não é um avanço direto.

Escreva pelo menos 30 caracteres (0/30).

Passo 6 de 7

Conferir o resultado da integração

Valide a integração combinando evidências dos arquivos, do estado do repositório e do histórico.

Confira o conteúdo e as pendências

Neste exemplo, o merge de ajuste-menu em entrega terminou sem conflitos. Permaneça em entrega e abra os arquivos: confira tanto as novidades quanto o conteúdo que deveria permanecer.

Exemplo

Resultado esperado nos arquivos

  • menu.txt: manter as opções “Início” e “Ajuda” e incluir “Contato”, adicionada pela origem.
  • README.md: manter o título “Portal de estudos”, atualizado no destino antes do merge.

Consulte as pendências

bash
git status
git diff

O limite desses comandos

git status sem pendências confirma um estado limpo, não a correção do conteúdo. Já git diff vazio indica ausência de diferenças entre os arquivos rastreados no diretório de trabalho e a área de preparação. Ele não compara o projeto antes e depois do merge.

Essas evidências bastam?

Após o merge, você consultou apenas os comandos: git status informa que não há pendências e git diff não mostra nada. Qual conclusão é justificada?

Confirme as conexões do histórico

Antes do merge, ajuste-menu apontava para 6a3d920. Consulte o histórico e siga as conexões a partir de entrega: não basta encontrar o nome da origem na saída de --all.

Comando de conferência

bash
git log --oneline --graph --all --decorate

Saída do exemplo

text
*   c8e4a10 (HEAD -> entrega) Integra ajuste-menu
|\
| * 6a3d920 (ajuste-menu) Adiciona Contato ao menu
* | b7d1c42 Atualiza título do projeto
|/
* 1f2a3b4 Cria arquivos iniciais

O que o grafo confirma

HEAD -> entrega está no commit de merge, conectado às duas linhas anteriores. Assim, o histórico da origem está incorporado ao destino.

ajuste-menu continua em 6a3d920: o merge no destino não move nem exclui a branch de origem. No avanço direto, os dois nomes podem ficar no mesmo commit porque o destino avança até a origem.

Você aprovaria o resultado?

O histórico confirma a integração em entrega e o status está limpo. Ao abrir os arquivos, você encontra:

  • menu.txt: apenas “Início” e “Contato”; a opção “Ajuda”, que deveria permanecer, sumiu.
  • README.md: título “Portal de estudos” preservado.

Você aprovaria o resultado? Justifique usando as evidências.

Escreva pelo menos 30 caracteres (0/30).

Passo 7 de 7

Aplicar o fluxo completo e concluir

Proponha uma integração local, justifique o tipo de merge e indique as evidências que confirmam o resultado.

Desafio: preparar a versão para revisão

Um novo caso

A versão que será revisada está na branch revisao. Ela deve receber as mudanças de prazo-entrega.

Neste caso simulado, todo o trabalho já está commitado e não há pendências. Desde a base comum:

  • revisao alterou apenas README.md, incluindo Canal de suporte: e-mail.
  • prazo-entrega alterou apenas entrega.txt, incluindo Prazo: 5 dias úteis.

Os dois arquivos já existiam. Seus demais conteúdos devem ser preservados.

Histórico antes da integração

Saída ilustrativa de git log --oneline --graph --all --decorate:

plaintext
* 7c2e9a1 (HEAD -> prazo-entrega) Inclui prazo em entrega.txt
| * 4b8d6f0 (revisao) Inclui canal de suporte no README
|/
* 1a3c5e7 Base do projeto

Organize o fluxo seguro

Antes, durante e depois

Com origem e destino definidos, coloque as etapas em ordem.

  1. Confirmar que o trabalho está commitado na branch apropriada e conferir git status antes da troca.
  2. Executar git merge com o nome da branch de origem.
  3. Ativar o destino com git switch e confirmar a branch atual e a ausência de pendências com git status.
  4. Conferir os arquivos, o estado do repositório e o histórico na branch de destino.

Aplique ao caso

Sua proposta de integração

Sem precisar recriar o repositório, escreva:

  1. Quais são o destino e a origem e quais comandos você executaria até o merge.
  2. Se espera avanço direto ou commit de merge, justificando pelo grafo.
  3. O que verificaria nos arquivos, no git status e no histórico para confirmar o resultado.

Descreva resultados esperados; não é necessário afirmar que executou os comandos.

Seu roteiro para próximas integrações

Resumo

Do objetivo às evidências

  • Defina origem e destino, confirme o trabalho registrado, ative o destino e execute git merge com o nome da origem.
  • Se o destino é ancestral da origem e ela está à frente, o merge pode avançar diretamente, sem novo commit.
  • Com commits exclusivos nos dois lados, a integração bem-sucedida cria um commit de merge e preserva os históricos.
  • Confirme o conteúdo dos arquivos, o estado do repositório e o grafo. A branch de origem continua existindo e não é movida pelo merge no destino.

Atenção

Se aparecer um conflito

Não considere a integração concluída nem tente forçá-la. A resolução será praticada no próximo tutorial.

Integrar branches locais com merge

Parabéns! Você concluiu: Integrar branches locais com merge

Tutorial concluído! Você praticou o fluxo para integrar branches locais sem conflitos, explicar o tipo de merge e conferir o resultado por evidências complementares.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso