Git fixup com autosquash
Leia em: 1 minutos e meioDica importante: Mantenha sua árvore de commit limpa usando
git fixup com autosquash
Quem nunca fez algum commit com as seguinte descrições: "fix bug", "Fix a typo", "Fix whatever" e minutos você precisou limpar estas mensagens.
Tempos atrás eu aprendi a utilizar dois comandos muito úteis para resolver essa situação, são eles: git commit --fixup
e git rebase --autosquash
.
Com estes dois comandos fica fácil juntar vários commits de fixup
ao commit original e manter o seu histórico de commits limpo e organizado.
Como utilizar --fixup
e --autosquash
git add .
adicina todos os arquivos a serem commitadosgit commit --fixup <id-do-commit>
indica para qual commit defixup
irá se direcionargit rebase -i -autosquash <id-do-commit-anterior>
reorganiza a arvóre de commit, associando osfixup
com o commits originais
Exemplo
Imagine um respositório qualquer que tenha um branch nomeada como dev
. Neste branch temos dois commits em nossa arvóre:
$ (dev) git add feature1
$ (dev) git commit -m "Feature 1 is done"
[dev 1111111] Feature 1 is done
$ (dev) git add feature2
$ (dev) git commit -m "Feature 2 is done"
[dev 2222222] Feature 2 is done
Ao continuar o nosso trabalho encontramos alguns erros feitos nos arquivos que foram commitados como feature1
: então chegou a hora de usar a opção --fixup
$ (dev) git add feature1
$ (dev) git commit --fixup 1111111
[dev 3333333] fixup! Feature 1 is done
Aqui podemos observar que o GIT recuperou a mensagem de commit do feature1 e aplicou um prefixo fixup!
Vamos dar uma olhada no nosso histórico de commits:
$ (dev) git log --oneline
3333333 fixup! Feature 1 is done
2222222 Feature 2 is done
1111111 Feature 1 is done
0000000 Previous commit
Agora precisamos juntar o commit de fixup com o commit original. Chegou a hora de usar o autosquash
.
$ (dev) git rebase -i --autosquash 0000000
pick 1111111 Feature 1 is done
pick 2222222 Feature 2 is done
fixup 333333 fixup! Feature 1 is done
O comando acima abre o seu editor padrão com as linhas acima. Apenas salve e saia sem alterar nada.
Feito isto, vamos ver como a árvore de commits ficou:
$ (dev) git log --oneline
2222222 Feature 2 is done
1111111 Feature 1 is done
0000000 Previous commit
Perfeito! Agora todos aqueles commits de fixup foram mesclados juntos com os commits originais, sem demandar muito esforço.
É claro que existe outras maneiras de obter o mesmo resultado como mostrado aqui, mas de todas as maneiras que conheço este é o fluxo mais fácil e correto de se fazer.
Comentários:
Deixe sua dúvida, sugestão ou crítica, estou ansioso para saber tudo o que você achou sobre este post: