git rebase –autosquash

Cenário

Ao trabalhar em um branch de recurso, faço algumas alterações em um arquivo e, em seguida, submeto essas alterações. Mais tarde, faço algumas alterações adicionais no mesmo arquivo nas mesmas linhas e quero esmagar essas alterações no primeiro commit que toca no arquivo.

Git rebase

Você pode fazer um rebase --interactive(ou git rebase -ipara abreviar) e alterar a linha de commit de a pickpara a fixupe colocar o commit abaixo do commit a ser comprimido.

Isso limpa seus commits, mas pode ser tedioso se você tiver mais do que apenas alguns commits que deseja esmagar. É aí que --autosquashentra em cena.

Na página man git-rebase:

–autosquash
Quando a mensagem de log do commit começa com “squash! …” (ou “fixup! …”), e há um commit cujo título começa com o mesmo …, modifica automaticamente a lista de tarefas do rebase -i para que o commit marcado para squashing venha logo após o commit a ser modificado, e mude a ação do commit movido de pick para squash (ou fixup).

Então, prefixando a mensagem de confirmação com fixup!ou squash!seguido pelo texto da mensagem de confirmação a ser comprimida, um rebase interativo configurará a lista de tarefas para você automaticamente.

Exemplo

Digamos que eu tenha três commits ( git log) e desejo que o commit 5929914seja comprimido em commit 13e88b0:

commit 5929914169c97c08e9da967ba5f6d49704aaa999
More changes to Fix query for finding rows

commit
11c85ef5b907541b1b5f8fa7ef72e5d2c4f7b55c
Add unique constraint for calendar audiences

commit
13e88b0f2ec738b7ae61cc91a80067f0aed91c32
Fix query for finding rows

Quando emito git rebase HEAD~3 -i, vejo a seguinte lista:

pick 13e88b0 Fix query for finding rows
pick
11c85ef Add unique constraint for calendar audiences
pick
5929914 More changes to Fix query for finding rows

Se eu reformular minha mensagem de confirmação de acordo com a documentação para ser a seguinte, a confirmação deve ser posicionada automaticamente sob confirmação com a ação alterada para :--autosquash592991413e88b0fixup

commit 5929914169c97c08e9da967ba5f6d49704aaa999
fixup
! Fix query for finding rows

commit
11c85ef5b907541b1b5f8fa7ef72e5d2c4f7b55c
Add unique constraint for calendar audiences

commit
13e88b0f2ec738b7ae61cc91a80067f0aed91c32
Fix query for finding rows

Agora, com o comando: Eu obtenho o seguinte alterado automaticamente na minha lista de tarefas:git rebase HEAD~3 -i --autosquash

pick 13e88b0 Fix query for finding rows
fixup
5929914 fixup! Fix query for finding rows
pick
11c85ef Add unique constraint for calendar audiences

Voila! Agora pare de desperdiçar seu tempo movendo em torno de consertos e squash