freeCodeCamp/guide/portuguese/miscellaneous/understand-how-to-use-git-m.../index.md

70 lines
5.2 KiB
Markdown

---
title: Understand How to Use Git Merge
localeTitle: Entenda como usar o Git Merge
---
Vamos dizer que você está trabalhando em um aplicativo semelhante ao Reddit, mas especificamente para trechos de código. Em um aplicativo desse tipo, você provavelmente teria um branch `master` que contém todos os recursos liberados, um branch `dev` que pode conter recursos que foram codificados, mas ainda não implementados. Cada desenvolvedor na equipe criará suas próprias filiais fora do `dev` ramo de características individuais. A estrutura do repositório seria algo como isto:
```
--- Commit 3 --------- dev branch
/
--- Commit 1 ---- Commit 2 ---------------------------- master branch
```
Se você decidiu fundir o 3º commit ( `Commit 3` ) no branch `master` branch `dev` , então seria tão simples quanto rodar um comando `git merge` porque o branch `dev` está _atualizado_ com o branch `master` : todos os commits no branch `master` existem no branch `dev` . Você pode mesclar as ramificações executando os seguintes comandos:
```
git checkout dev
git merge master
```
O resultado seria algo assim:
```
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
```
Agora você decide trabalhar no recurso de autenticação. Para trabalhar no recurso de autenticação, você cria outra ramificação com base na ramificação `dev` e decide chamá-la de `auth` . É assim que a estrutura do repo se parece:
```
------ auth branch
/
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
```
Se você tivesse que cometer quaisquer alterações na ramificação de `auth` , mesclá-las com a ramificação `dev` seria trivial porque ela está atualizada com a ramificação `dev` . Agora, enquanto você estava trabalhando no recurso de autenticação, um dos desenvolvedores terminou de codificar o recurso de realce de sintaxe e decidiu mesclá-lo com a ramificação `dev` . O repo se parece com isso agora:
```
--- Commit 5 --- auth branch
/
--- Commit 4 ------ dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 ------------------------ master branch
```
Sua ramificação, na terminologia do Git, é agora um commit por trás do branch `dev` . Isso significa que você não pode simplesmente mesclar as duas ramificações: você deve atualizar sua ramificação `auth` com a ramificação `dev` . Isso pode ser feito com `git merge` !
Mesclar a ramificação de `auth` com a ramificação `dev` ou a ramificação `dev` com a ramificação `master` é direta e faz o que você espera, mas mesclar o inverso tem suas próprias idiossincrasias que não são intuitivas à primeira vista. Eu posso tagarelar sobre isso, ou posso mostrar outro grande diagrama do que aconteceria se você mesclasse o branch `dev` com o branch `auth` neste momento:
```
--- Commit 5 ----------- auth branch
/ /
--- Commit 4 -------------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------------------------- master branch
```
Veja o que eu fiz lá? Olhe para o diagrama por um segundo e tente entender o que está acontecendo aqui antes de prosseguir. Você essencialmente fez outro commit na ramificação `auth` com os commits da ramificação `dev` incluída. Mas tudo bem, certo? Afinal de contas, no final do dia, eu queria atualizar minha ramificação de `auth` com a ramificação `dev` e agora ela _está_ atualizada? Sim. Mas deixe-me mostrar um diagrama para ilustrar explicitamente o que o outro diagrama implica: Sua ramificação de `auth` agora é assim:
```
--- Commit 5 ------- Commit 4 ------- auth branch
/ /
------ Commit 4 --- --------------------- dev branch
```
Veja Agora? Você _copiou_ o commit. Se você fosse mesclar ao ramo `dev` agora, seria algo como isto:
```
--- Commit 5 ------- Commit 4 -------------------------------------- auth branch
/ / \
------- Commit 4 ----------------------- Commit 5 ---- Commit 4 -------- dev branch
```
Você mesclou o mesmo commit duas vezes! Isto obviamente não terá repercussões para o seu próprio código, mas se você decidir analisar seus `git logs` , perceberá imediatamente como está suja sua história do git, com alguns commits sendo feitos repetidamente. Se você quisesse reverter para um commit, seria muito difícil decidir para qual commit reverter.
É preferível que você use o [Git-Rebase](http://forum.freecodecamp.com/t/how-to-use-git-rebase/13226) .