Conceito de Merge — Git e Github

Após conhecermos a tão famosa Branch que tem como propósito dividir a linha original do desenvolvimento do projeto, precisamos “trazer” de volta para a branch main/master, dei uma breve explicação de como fazer isso em Conceito de branch, porém chegou …


This content originally appeared on DEV Community and was authored by Luiz Eduardo Prado Veltroni

Após conhecermos a tão famosa Branch que tem como propósito dividir a linha original do desenvolvimento do projeto, precisamos "trazer" de volta para a branch main/master, dei uma breve explicação de como fazer isso em Conceito de branch, porém chegou a hora de se aprofundar no merge e resolver os possíveis conflitos que irão aparecer(uma hora ou outra).

Merge

O merge(mesclagem) é o jeito do Git de pegar duas branchs e unificar em apenas um histórico. O comando git merge permite que você pegue as linhas de desenvolvimento independentes criadas pelo git branch e junta elas em apenas uma ramificação.

É de extrema importância ter algo bem claro na hora de realizar um merge, sempre a branch que você está (HEAD) vai ser a que vai "receber" a branch, sendo atualizado para refletir a mesclagem, a branch alvo não sofre nenhum tipo de alteração.

git merge é usado sempre depois do git checkout para selecionar o branch atual que irá receber e com o git branch -d para excluir o branch alvo obsoleto.

Ilustração de varias ramificações

Merge na prática

Vamos utilizar um exemplo prático, digamos que você desenvolveu um Header bem básico representado pela branch feat/header (Nomenclatura tirada do Git Flow, explicarei futuramente).

Branch criada com o header

Depois de ter criado uma branch com git checkcout -b feat/header (Lembrando que a flag -b do checkout cria uma branch e já move para ela), realizamos as criações necessárias e commitamos o arquivo index.html com git commit -am "feat: header"(Lembrando que a flag -am adiciona os arquivos e já realiza o commit).

Agora o que precisamos fazer para juntar essa nova feature na branch principal, precisamos ir para a branch receptora, sempre atento para onde o HEAD está apontado, e realizamos o merge. Uma vez que a branch ficou obsoleta podemos excluir ela.

Output após o comando merge

Resolvendo Conflitos

Durante o processo de criação e branchs e a junção com o merge, é possível que mais de um desenvolvedor edite a mesma linha de código, com isso o Git gera um conflito, por ter dois commits o Git não sabe qual utilizar, e não consegue resolver esse problema sozinho, é necessário que o usuário decida qual é o correto.

Digamos que você ficou responsável por editar um link do header e um colega recebeu uma task para alterar a logo do footer, porém acabou adicionando alguns caracteres sem querer no link que você está alterando.

Primeiro você cria uma nova branch de correção e realiza a alteração, cria um commit e mescla com a branch master, durante esse processo um colega adicionou o caractere acidental e realizou um commit na master.

Nossa alteração:
Alterações no Index.html

Acidente:
Index.html com as alterações acidentais

Você finalizou todas as alterações e da um git checkout master que será a branch receptora, e realiza o git merge fix/header, e acaba vendo um output no terminal CONFLICT, e repara que algo mudou no editor de texto (Visual Studio Code).

Terminal:
Output terminal conflict

Visual Studio Code:
Vistual Studio Code resolvendo conflito

Reparamos que ele adicionou alguns caracteres:
<<<<<<< Branch receptora (HEAD)
>>>>>>> Branch de mesclagem (fix/header)
======= Separa as branchs, o de cima represente a branch recepctora e de baixo a de mesclagem.

E podemos ver que existe um menu (clicavel) acima do conflito, nele existe algumas opções rápidas que podemos realizar, as mais importantes são:

Accept Current Change: Irá aceitar a branch receptora, nesse caso ele iria manter os caracteres acidentais.
Accept Incoming Change: Irá aceitar a alteração realizada no header, nesse caso seria "Conheça nossa empresa"
Accpet Both Changes: Ele aceita as duas modificações, criando então duas linhas, uma com os caracteres e outra com as alterações.

No nosso caso queremos aceitar apenas o Accept Incoming Change para manter as alterações que realizamos na branch fix/header, podemos ver que nada muda, por que os arquivos conflitantes agora estão como "Unmerged patch", precisamos adicionar ele no próximo commit git add . e criar um commit de resolução git commit -m "resolve conflitos no header".

Terminal de commit do conflito

E pronto temos o nosso conflito mais comum de acontecer resolvido e já podemos excluir a branch obsoleta das modificações.


This content originally appeared on DEV Community and was authored by Luiz Eduardo Prado Veltroni


Print Share Comment Cite Upload Translate Updates
APA

Luiz Eduardo Prado Veltroni | Sciencx (2022-01-13T14:41:43+00:00) Conceito de Merge — Git e Github. Retrieved from https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/

MLA
" » Conceito de Merge — Git e Github." Luiz Eduardo Prado Veltroni | Sciencx - Thursday January 13, 2022, https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/
HARVARD
Luiz Eduardo Prado Veltroni | Sciencx Thursday January 13, 2022 » Conceito de Merge — Git e Github., viewed ,<https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/>
VANCOUVER
Luiz Eduardo Prado Veltroni | Sciencx - » Conceito de Merge — Git e Github. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/
CHICAGO
" » Conceito de Merge — Git e Github." Luiz Eduardo Prado Veltroni | Sciencx - Accessed . https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/
IEEE
" » Conceito de Merge — Git e Github." Luiz Eduardo Prado Veltroni | Sciencx [Online]. Available: https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/. [Accessed: ]
rf:citation
» Conceito de Merge — Git e Github | Luiz Eduardo Prado Veltroni | Sciencx | https://www.scien.cx/2022/01/13/conceito-de-merge-git-e-github/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.