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]