Llegué a este enfoque (y probablemente sea exactamente lo mismo que usar rebase interactivo), pero para mí es algo sencillo.
Nota: presento este enfoque para ilustrar lo que puede hacer en lugar de una alternativa diaria. Dado que tiene muchos pasos (y posiblemente algunas advertencias).
Digamos que quieres cambiar commit 0y actualmente estás enfeature-branch
some-commit---0---1---2---(feature-branch)HEAD
Pague este compromiso y cree un quick-branch. También puede clonar su rama de características como un punto de recuperación (antes de comenzar).
?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
Ahora tendrá algo como esto:
0(quick-branch)HEAD---1---2---(feature-branch)
Cambios de escenario, esconde todo lo demás.
git add ./example.txt
git stash
Confirmar cambios y finalizar la compra en feature-branch
git commit --amend
git checkout feature-branch
Ahora tendrá algo como esto:
some-commit---0---1---2---(feature-branch)HEAD
\
---0'(quick-branch)
Rebase feature-branchen quick-branch(resolver cualquier conflicto en el camino). Aplicar alijo y eliminar quick-branch.
git rebase quick-branch
git stash pop
git branch -D quick-branch
Y terminas con:
some-commit---0'---1'---2'---HEAD(feature-branch)
Git no duplicará (aunque realmente no puedo decir hasta qué punto) el 0 se compromete al rebasar.
Nota: todos los hash de confirmación se cambian a partir de la confirmación que originalmente teníamos la intención de cambiar.