Git Tutorial - Fusão de filiais
Aprenderemos a fundir ramos e também a lidar com conflitos, caso exista, neste tutorial.
No último tutorial, o que fizemos é que criamos um novo ramo para trabalhar em algumas novas funcionalidades que não queremos estragar o ramo master.
Depois de fazermos esses novos branches e ficarmos felizes com as novas funcionalidades, precisamos fundi-lo de volta no branch master. Para que quando publicarmos o próximo código de lançamento, a nova funcionalidade também seja incluída.
Fast Forward git merge
Digamos que estamos felizes com as mudanças no ramo new_test_branch e vamos fundi-lo de volta para o master.
-
Confira o ramo
master
$ git checkout master
-
Fundir o ramo ao
master
$ git merge new_test_branch
Updating 5fef94e..e7a7e81
Fast-forward
test3.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Nós pegamos a característica do ramo new_test_branch e a fundimos neste ramo master.
O Fast-forward mostrado na mensagem após a fusão significa que o git faz o fastforward até as mudanças de código que fizemos no branch porque no tempo entre a ramificação e a fusão de volta ao master, nós não fizemos nenhuma mudança no branch master.
Merge recursivo git merge
Antes de demonstrarmos esta diferente git merge, precisamos criar dois ramos test_branch_A e test_branch_B e fazer diferentes alterações neles. Então fundiremos o ramo test_branch_A de volta para o ramo master.
Agora vamos fundir o ramo test_branch_B com o master.
$ git merge test_branch_B
Merge made by the 'recursive' strategy.
test1_rename.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
A diferença entre esta fusão e a fusão fast-forward é que a fusão é feita pela estratégia recursiva porque este código do ramo não tem a funcionalidade test_branch_A nele. Em outras palavras, o ramo master mudou depois que o ramo test_branch_B foi criado.
Agora o master está atualizado com essas duas funcionalidades, e não importa que tenhamos trabalhado nelas ao mesmo tempo, pessoas diferentes fazendo-as com as duas apenas fundindo-as de volta e tudo está bem.
Resolver Conflitos
O que nós modificamos em dois ramos de teste não tem nenhum conflito, mas e se houver conflitos quando você fundir alguns ramos para o master?
Vamos criar dois ramos test_branch_C e test_branch_D, depois anexar texto A letra deve ser C ao arquivo test3.txt no ramo test_branch_C e anexar texto A letra deve ser D ao arquivo test3.txt no ramo test_branch_D.
Então fundimos o arquivo test_branch_C de volta no ramo master.
Agora, vamos fundir o arquivo test_branch_D no ramo master,
$ git merge test_branch_D
Auto-merging test3.txt
CONFLICT (content): Merge conflict in test3.txt
Automatic merge failed; fix conflicts and then commit the result.
Você poderia ver aqui que ele não poderia ser fundido com sucesso porque detecta o conflito no arquivo test3.txt. Precisamos resolver manualmente o conflito editando o arquivo conflitante.
O arquivo test3.txt mostra o conflito como
<<<<<<< HEAD
The letter should be C
=======
The letter should be D
>>>>>>> test_branch_D
O texto entre HEAD e ======= é o texto no ramo master que vem do ramo fundido test_branch_C, que difere do texto no ramo a ser fundido test_branch_D.
Você precisa escolher qual texto deve ser mantido no master, e deletar todos os símbolos como <<<<< e >>>>>>.
Digamos que o texto anexado deve ser A letra deve ser D. Atualizamos a área conflitante para ser The letter should be D.
Após resolvermos o conflito, podemos cometer o conflito resolvido utilizando git commit.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook