O rebase interativo é uma ferramenta poderosa, mas mais ainda é o recurso –autosquash do git 1.7.
Depois de adicionar suas alterações ao índice com git add
, os seguintes aliases permitirão que você especifique um SHA curto de um commit para corrigir / squash, rebasing interativamente os commits intermediários:
fixup = !sh -c 'REV=$(git rev-parse $1) && git commit --fixup $@ && git rebase -i --autosquash $REV^' -
squash = !sh -c 'REV=$(git rev-parse $1) && git commit --squash $@ && git rebase -i --autosquash $REV^' -
Esses dois primeiros aliases podem ser encontrados livremente na natureza, não consigo encontrar a fonte de onde os obtive e, portanto, dou os devidos créditos.
Se o objetivo é corrigir / esmagar algum trabalho até o último commit, você pode usar:
fixprev = "!f() { SHA=$(git rev-parse HEAD) && REV=$(git rev-parse $SHA) && git commit --fixup $SHA && git rebase -i --autosquash $REV^; }; f -"
sqprev = "!f() { SHA=$(git rev-parse HEAD) && REV=$(git rev-parse $SHA) && git commit --squash $SHA && git rebase -i --autosquash $REV^; }; f -"