Article image

AM

Andre Marques08/03/2024 13:29
Compartilhe

Git merge: A dança das branches

  • #Git

O 'git merge' é um comando fundamental no Git que combina as alterações de diferentes branches. É usado para integrar o trabalho realizado em branches separadas de volta a brach principal do repositório. No final do fluxo do Git, isso geralmente ocorre após o desenvolvimento de um novo recurso ou correção de bug em brach especifica. O 'git merge' une essas alterações a branch principal, garantindo que o histórico de desenvolvimento seja organizado e colaborativo.

Tipos de Mesclagem

No merge existe duas formas de se fazer um merge, o fast-forward e o theree-way.

Fast-foorward - É uma forma simplificada de mesclagem no Git, onde a branch de destino é simplesmente movida para frente, apontando para o mesmo commit ao qual a branch sendo mesclada está apontando. Isso ocorre quando todos os commits da branch sendo mecladaestão acessíves a partir da brach de destino, sem bifurcação na linha do tempo de desenvolvimento. Não é criado um novo commit de mesclagem, tornando a mesclagem rápida e direta. No entanto, o "fast-forwad" pode não ser adequado em todos as situações, especialmente quando se deseja manter um histórico mais detalhado.

Three-way - Um procedimento que combina três commits: o commit de destino, o da branch sendo mesclada e um ancestral comum. Durante o merge, o Git compara as alterações nos commits das duas branches e tenta combiná-las automaticamente, Após isso, um novo commit de mesclagem é criado, incorporando as alterações de ambas as branches. Esse processo é fundamental para integrar trabalhos de diferentes branches e garantir a correta combinação de alterações, mesmo em históricos de desenvolvimeto divergentes.

Mescladno Ramificações com o Git

Para começar, vamos criar novo repósitorio no git e adicionar um arquivo

$ git init
$ echo "Hello, World!" > greeting.txt
$ git add greeting.txt
$ git commit -m "Add Greeting"

Em seguida, vamos criar uma nova ramificação e fazer algumas alterações no arquivo

$ git branch new-feaure
$ echo chekout new-fetuare
$ echo "Bonjour, le monde!" >> greeting.txt
$ git commit -m "Add French Greeting"

Agora temos dois ramos em nossos repositório: o ramo que tem a saudação original "Hello World!" e o ramo que contém a saudação adicional "Bonjour, le monde!".

Há varias maneiras de mesclar as alterações de volta a ramificação e uma das mais utilizada é o merge --no-ff, onde ele cria uma nova confirmação de mesclagem que é útil quando você deseja preservar todo o histórico da ramificação para a confirmação mais recente. Então seria algo assim:

$ git chekout master
$  git merge --no-ff new feature

A saída:

Merge made by the 'recursive' strategy
greeting.txt | 1 +
1 file changed, 1 insetion(+)

E pra confirma que uma nova confirmação de mesclagem foi criada e que reúne todas as alterações de ambas ramificações podemos usar o 'git.log'.

Conflito de Mesclagem

Em alguns casos pode surgir uma situação complicada que ocorre quando fundimos duas ramificações, que é o conflito. Isso ocorre pois quando as mesmas linhas de código forma modificadas em ambas as ramificações e o Git não consegue resolver automaticamente as diferenças. Quando isso ocorre o Git marca as linhas em conflito e você tem que resolver o conflito manualmente.

Para demostrar melhor, vamos criar outra ramificação e fazer umas alterações

$ git branch conflict
$ git checkout conflict
$ sed -i 's/Hello, world!/Olá, mundo!' greeting.tx
$

Agora vamos tentar mesclar as ramificações

$ git checkout master
$ git merge conflict

Feito isso o Git deverá retorna uma mensagem de erro mostrando que há um conflito e marcará as linhas em conflito, você verá algo assim

Copy codeAuto-merging greeting.txt
CONFLICT (content): Merge conflict in greeting.txt
Automatic merge failed; fix conflicts and then commit the result.
Copy code<<<<<<< HEAD
Bonjour, le monde!
=======
Hola, mundo!
>>>>>>> conflict

Para resolver, precisamos editar o arquivo e remover os marcadores. Onde podemos manter as duas saudações adicionado uma quebra de linha

Bonjour, le monde!


Hola, mundo!


Então com isso resolvido podemos fazer o commit.

Evitando Conflitos

Uma boa dica para evitar conflitos é garantir que cada ramificação se concentre em um aspecto separado da base de código. Por exemplo se uma ramificação estiver trabalhando na interface front e outra estiver na back, haverá menos probabilidade de ocorrerem conflitos.

Conclusão

Lembre-se o 'Git merge' é uma ferramenta essencial para o trabalho colaborativo em projetos de software. Ao entender o funcionamento do 'Git merge' e as diferentes opções disponíveis, você pode usá-lo de forma eficiente para integrar diferentes branches e manter o histórico do repositório organizado.

Referencias

Git. (2024). Git - Documentação. Disponível em: [Git - git-merge Documentation (git-scm.com)]

Doe, J. (2024). Como usar o Git Merge: Dicas do Blog Dotenx. Disponível em: [How to Resolve Merge Conflicts in Git – A Practical Guide with Examples – 7.dev]

"7.dev". (2024). Guia Completo para Mesclagem de Ramos com Git. Disponível em: [Git merge - learn by example (dotenx.com)]

Atlassian. (2024). Git Merge: Melhores Práticas e Dicas. Disponível em: [Git Merge | Atlassian Git Tutorial]

Compartilhe
Comentários (0)