// aula 04 · Git & GitHub
O que é merge?
Merge é o processo de integrar o histórico de uma branch em outra. Quando você termina de desenvolver uma feature numa branch separada, faz o merge dela na main para o código entrar no projeto principal.
Acontece quando a main não teve nenhum commit novo desde que a feature branch foi criada. O Git simplesmente "avança" o ponteiro da main. Sem commit de merge extra — histórico linear e limpo.
Acontece quando ambas as branches tiveram commits. O Git cria um merge commit que une os dois históricos. O commit tem dois pais — aparece como bifurcação no git log --graph.
# 1. Ir para a branch que vai RECEBER o merge (geralmente main) git switch main # 2. Fazer o merge git merge feature/login # Forçar um merge commit mesmo sendo fast-forward (mantém histórico) git merge --no-ff feature/login # 3. Deletar a branch após o merge git branch -d feature/login
Conflitos de merge — como resolver
Um conflito ocorre quando duas branches modificaram a mesma parte do mesmo arquivo. O Git para o merge e marca os conflitos no arquivo para você resolver manualmente.
// arquivo com conflito — o que você vê no editor:
<<<<<<< HEAD (sua branch atual) print("Olá, Lucilia!") ======= print("Olá, mundo!") >>>>>>> feature/login (branch sendo integrada)
# Ver quais arquivos têm conflito git status # Após editar e resolver manualmente os conflitos: git add arquivo-resolvido.py git commit -m "merge: resolve conflito em arquivo-resolvido.py" # Abortar o merge e voltar ao estado anterior git merge --abort
<<<<<<<, ======= e >>>>>>> e deixe só o código corretogit add . e git commitRebase — uma alternativa ao merge
Une o histórico preservando todos os commits de ambas as branches. Cria um merge commit extra. Histórico mais completo, mas pode ficar "sujo" com muitas bifurcações.
Reescreve o histórico da feature branch como se ela tivesse sido criada a partir do último commit da main. Histórico linear e limpo, mas altera os hashes dos commits.
# Rebase da feature branch em cima da main git switch feature/login git rebase main # Rebase interativo — reescrever os últimos N commits git rebase -i HEAD~3 # Abortar o rebase em caso de conflito git rebase --abort # Continuar após resolver conflito durante rebase git add . git rebase --continue
Nunca faça rebase de commits que já foram enviados para um repositório público (git push). O rebase reescreve o histórico — se outros já baixaram esses commits, você causará conflitos sérios para eles.
Git Stash — guardando trabalho incompleto
O stash é como uma "gaveta temporária" — guarda as alterações não commitadas para você poder trocar de branch sem perder o trabalho.
# Guardar alterações na gaveta (stash) git stash git stash push -m "trabalho em progresso no login" # Ver o que está na gaveta git stash list # Recuperar o último stash git stash pop # aplica E remove da gaveta git stash apply # aplica mas MANTÉM na gaveta git stash apply stash@{1} # aplica um específico # Deletar um stash git stash drop stash@{0} git stash clear # limpa tudo