O Git usa ramificações para isolar fluxos de desenvolvimento, para evitar que a ramificação de lançamento estável seja poluída. Trazer o trabalho de uma ramificação para o fluxo principal significa mesclar ramificações. Veja como você faz isso.
Índice
O Git foi projetado para tornar a ramificação simples e rápida. Em contraste com outros sistemas de controle de versão, ramificar no Git é uma questão trivial. Especialmente em projetos com vários desenvolvedores, a ramificação é uma das principais ferramentas organizacionais do Git.
Ramifica novos esforços de desenvolvimento em sandbox para que o código possa ser modificado ou adicionado sem afetar o código em outras ramificações, especialmente a ramificação principal ou mestre. Geralmente contém a versão estável da sua base de código.
Isolar essas alterações da sua versão de código estável faz todo o sentido. Mas, mais cedo ou mais tarde, o novo código será testado, revisado e carimbado para ser implementado no branch master. Nesse ponto, você precisa mesclar seu branch no branch master.
Na verdade, as ramificações podem ter sub-ramificações, então você pode mesclar sua ramificação em alguma outra ramificação em vez da ramificação mestre. Apenas lembre-se de que as mesclagens sempre pegam uma ramificação e a mesclam em uma ramificação de destino, qualquer que seja essa ramificação. Se quiser mesclar seu branch master em outro branch, você também pode fazer isso.
Como a maioria das ações no Git, você realiza mesclagens em seu repositório local e as envia por push para seu repositório remoto.
Temos um pequeno projeto de desenvolvimento com um repositório Git local e um repositório Git remoto. Criamos um branch chamado “bugfix14” do branch “master” e trabalhamos em uma solução para um bug.
Esse trabalho foi concluído e testamos nosso código. Tudo funciona conforme o esperado. Queremos implementar essas alterações no branch master para que nossa correção faça parte da próxima versão do software.
Há um pouco de preparação a ser feita antes de realizarmos a mesclagem. Precisamos ter certeza de que o branch de destino — neste caso o branch “mestre” — e o branch que iremos mesclar nele estão ambos atualizados.
Para fazer isso usaremos o
git status
comando.
status do git
Tudo isso indica que a filial está atualizada e podemos prosseguir. Se algum deles indicasse que existiam alterações, precisaríamos prepará-las, confirmá-las e enviá-las para o controle remoto. Se alguém tiver trabalhado nesses arquivos, talvez seja necessário extrair as alterações do repositório remoto.
Verificar o branch em que iremos fazer a fusão simplifica o processo de fusão. Também nos permite verificar se está atualizado. Vamos dar uma olhada no branch master.
mestre de checkout git
status do git
Recebemos as mesmas confirmações de que o branch “master” está atualizado.
Antes de mesclarmos, nossos commits ficam assim.
O branch “bugfix14” foi ramificado do branch “master”. Houve um commit no branch “master” após a criação do branch “bugfix14”. Houve alguns commits no branch “bugfix14”.
Certificamo-nos de que nossos dois ramos estão atualizados e verificamos o ramo “master”. Podemos emitir o comando para mesclar o branch “bugfix14” no branch “master”.
git merge correção de bug14
A fusão ocorre. A ramificação “bugfix14” ainda existe, mas agora as alterações feitas nessa ramificação foram mescladas na ramificação “master”.
Neste caso, o comando merge executa uma mesclagem de três vias. Existem apenas dois ramos, mas há três commits envolvidos. Eles são o chefe de qualquer branch e um terceiro commit que representa a própria ação de mesclagem.
Para atualizar nosso repositório remoto, podemos usar o comando git push.
dê um empurrão
Algumas pessoas preferem excluir ramificações laterais depois de fundi-las. Outros cuidam de preservá-los como um registro da verdadeira história do desenvolvimento do projeto.
Se quiser deletar o branch, você pode fazer isso usando o git branch
comando com a -d
opção (delete).
git branch -d bugfix14
Para excluir o branch no repositório remoto use este comando:
git push origem --delete bugfix14
Você terá um histórico de commits linear, mas não será o histórico verdadeiro.
Se você não fez nenhum commit no branch “master”, seu histórico ficará assim. Também ficará assim se você tiver rebaseado seu branch de desenvolvimento para que ele fique anexado ao final do branch “master”.
Como não há commits no branch “master”, para mesclar o branch “bugfix15”, tudo o que o Git precisa fazer é apontar o ponteiro principal “master” para o último commit do branch “bugfix15”.
Podemos usar o git merge
comando usual:
git merge correção de bug15
Isso nos dá esse resultado.
Que é igual a isto:
Que é igual a isto:
O Git realizará uma mesclagem rápida sempre que puder. Se os commits no branch “master” significarem que uma mesclagem de avanço rápido não é possível, o Git usará uma mesclagem de três vias.
Você não pode forçar uma mesclagem de avanço rápido — talvez não seja possível, afinal — mas você pode declarar que será uma mesclagem de avanço rápido ou nada. Existe uma opção que instrui o Git a usar uma mesclagem de avanço rápido, se puder, mas não a fazer uma mesclagem de três vias, se não puder. A opção é --ff-only
(somente mesclagem de avanço rápido).
Isso mescla o branch “bugfix15” no branch “master”, mas somente se uma mesclagem de avanço rápido for possível.
git merge --ff-only bugfix15
O Git irá reclamar e sair se não for possível.
git merge --ff-only bugfix16
Neste caso, houve commits no branch “master”, portanto uma mesclagem de avanço rápido não é possível.
Se as mesmas partes do mesmo arquivo tiverem sido alteradas em ambas as ramificações, as ramificações não poderão ser mescladas. A interação humana é necessária para resolver as edições conflitantes.
Aqui, fizemos alterações em um arquivo chamado “rot.c” em um branch chamado “bugfix17” que queremos mesclar com o branch “master”. Mas “rot.c” também foi alterado no branch “master”.
git merge correção de bug17
Quando tentamos mesclá-lo, recebemos um aviso de que há conflitos. O Git lista os arquivos conflitantes e nos informa que a mesclagem falhou. Poderíamos recuar completamente usando a --abort
opção:
git mesclar --abortar
Mas resolver fusões não é tão assustador quanto parece. Git fez algum trabalho para nos ajudar. Se editarmos um dos arquivos conflitantes – no nosso caso, temos apenas um – encontraremos as seções de código conflitantes destacadas para nós.
Cada conflito é delimitado por sete caracteres de menor que ” <<<<<<<
” e sete caracteres de maior que ” >>>>>>>
“, com sete sinais de igual ” =======
” entre eles.
Você pode pesquisar facilmente um dos conjuntos de sete caracteres e passar de conflito em conflito em seu arquivo. Para cada conflito, você precisa escolher qual conjunto de edições deseja manter. Você deve editar o código que está rejeitando e as linhas de sete caracteres que o Git adicionou.
Manteremos o código do branch “bugfix17”. Após a edição, nosso arquivo fica assim.
Agora podemos continuar com a fusão. Mas observe que usamos o commit
comando para fazer isso, não o merge
comando.
Confirmamos a alteração preparando o arquivo e enviando-o normalmente. Verificaremos o status antes de fazer o commit final.
git adicionar rot.c
status do git
git commit -m "Mesclado bugfix17"
A mesclagem está concluída. Agora podemos enviar isso para nosso repositório remoto.
Todas as ramificações precisam ser mescladas, eventualmente, para que as alterações nelas não fiquem órfãs e esquecidas.
Mesclar filiais é fácil, mas lidar com conflitos pode ser complicado em equipes maiores e ocupadas. A resolução de conflitos pode exigir a contribuição de cada desenvolvedor apenas para explicar o que seu código faz e por que fizeram as alterações. Você precisa entender isso antes de tomar uma decisão informada sobre quais edições manter.
Infelizmente, o Git não pode ajudar com isso.
Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…