Chegou a essa abordagem (e provavelmente é exatamente o mesmo que usar o rebase interativo), mas para mim é meio simples.
Nota: Apresento essa abordagem para ilustrar o que você pode fazer, em vez de uma alternativa cotidiana. Uma vez que tem muitos passos (e possivelmente algumas advertências).
Digamos que você queira alterar o commit 0
e que você está atualmentefeature-branch
some-commit---0---1---2---(feature-branch)HEAD
Faça o checkout para este commit e crie um quick-branch
. Você também pode clonar sua ramificação de recursos como um ponto de recuperação (antes de iniciar).
?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
Agora você terá algo parecido com isto:
0(quick-branch)HEAD---1---2---(feature-branch)
Mudanças de palco, escondem tudo o mais.
git add ./example.txt
git stash
Confirme as alterações e faça o checkout de volta para feature-branch
git commit --amend
git checkout feature-branch
Agora você terá algo parecido com isto:
some-commit---0---1---2---(feature-branch)HEAD
\
---0'(quick-branch)
Rebase feature-branch
para quick-branch
(resolva quaisquer conflitos ao longo do caminho). Aplique o esconderijo e remova quick-branch
.
git rebase quick-branch
git stash pop
git branch -D quick-branch
E você acaba com:
some-commit---0'---1'---2'---HEAD(feature-branch)
O Git não duplicará (embora eu não possa realmente dizer até que ponto) o 0 se compromete ao rebasear.
Nota: todos os hashes de confirmação são alterados a partir do commit que originalmente pretendemos alterar.