10/02/2023
Por Thiago Marques
O pai tá on!!
Em nosso último post falamos sobre o poder que o GIT tem na utilização de ramificações (branches), contudo isso gera uma grandedúvida: Beleza, mas como faço para juntar a minha ramificação conteúdo, com a ramificação principal (master/main)?
Nesse post iremos falar sobre o merge que é justamente poder juntar branches, e a diferença entre um merge e um rebase.
Git merge
O
comando git merge é a forma que o git possui de unificar branches, ou
seja, com ele conseguimos do branch atual puxar o histórico do branch alvo,
gerando um commit de unificação.
Isso
ocorre apenas no branch onde vamos unificar, para o branch ‘alvo’, vai ser como
as alterações não tivessem ocorrido.
Na
prática, o git vai avaliar os dois históricos dos branches, e tentar mesclar
automaticamente os históricos. o que as vezes não dá certo e ocorrem os famosos
conflitos, onde é necessário intervenção do usuário para conclusão.
Para
evitar os conflitos, o ideal é sempre seguir um bom procedimento de passos, no
qual recomendo o sugerido pela Atlassian, cito-o:
1.
Entre no branch que vai receber o
merge, ou seja, aquele que desejamos manter depois da unificação;
2.
Atualize os commits mais recentes nas
duas branches, o que pode ser feito com o comando:
git fetch –all
3.
Execute o merge com o comando:
git merge <branch_alvo>
Para
ficar mais claro, vamos imaginar o seguinte cenário: Temos a branch principal
(main), que é a responsável pelas matérias do blog. Então criamos a branch conteudo,
que irá focar em todo tipo de conteúdo projeto em si, e por fim, para segmentar
ainda mais criamos uma ramificação dentro da branch artigos que vai
focar apenas em artigos científicos (que é exatamente o que fizemos com o
exemplo do visualizing no último post).
Agora
precisamos unificar todos os branches no principal para assim ter os conteúdos
para postar no blog, com isso temos os seguintes passos:
1.
Criar o branch conteudo e executar
dois commits;
2.
Executar dois commits na branch
master;
3.
Criar o branch artigos como ‘filha’ da
branch conteúdos, e executar dois commits;
4.
Criar o merge da branch conteúdo com a
artigos;
5.
Criar o merge da branch artigos com a
principal;
Obs.:
Para o merge sempre conectamos na branch que vai RECEBER o merge, e PUXAMOS o
histórico da branch que queremos.
Colocando
a mão na massa temos:
Git rebase
O rebase é uma outra forma de se juntar branches, contudo com algumas características mais ‘radicais’. Apesar de manter o histórico de forma linear, ele pega os logs do branch ativo e coloca na frente do branch alvo, além de não gerar o ‘commit de merge’.
Note que mesmo isso gerando um histórico linear, gera um problema, pois ele mexe com a estrutura dos branches, reescrevendo todo o histórico dos commits. E justamente por características assim é que existe uma regra de ouro que recomenda que não seja feito rebase em branches públicos, uma vez que a possibilidade de ‘dar ruim’ é grande.
O comando que usamos para fazer o rebase é:
- #logado na branch principal
- git rebase <branch_secundária>
Ressaltando mais uma vez: o rebase tem um grande poder, mas como diria o Tio Bem: “com grandes poderes vem grandes responsabilidades”, então utilize ele em situações especifica.
That’s all folks! Be Happy!!!
thiago.marques@darede.com.br
Technical Account Manager da Darede, formato em Rede de Computadores, e pós graduado em Segurança da Informação. Possui ampla experiência em Datacenters e Service Providers, além de ser um entusiasta em DevOps e mercado financeiro.