Пришел к такому подходу (и он, вероятно, точно такой же, как с использованием интерактивного ребазинга), но для меня это довольно просто.
Примечание: я представляю этот подход для иллюстрации того, что вы можете сделать, а не для повседневной альтернативы. Так как в нем много шагов (и, возможно, несколько предостережений).
Скажем, вы хотите изменить коммит, 0
и вы в настоящее время наfeature-branch
some-commit---0---1---2---(feature-branch)HEAD
Оформить заказ на эту фиксацию и создать quick-branch
. Вы также можете клонировать свою функциональную ветвь как точку восстановления (перед запуском).
?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
Теперь у вас будет что-то вроде этого:
0(quick-branch)HEAD---1---2---(feature-branch)
Сценические изменения, прятать все остальное.
git add ./example.txt
git stash
Зафиксируйте изменения и вернитесь к feature-branch
git commit --amend
git checkout feature-branch
Теперь у вас будет что-то вроде этого:
some-commit---0---1---2---(feature-branch)HEAD
\
---0'(quick-branch)
Перебазировать feature-branch
на quick-branch
(разрешить любые конфликты по пути). Примените тайник и удалите quick-branch
.
git rebase quick-branch
git stash pop
git branch -D quick-branch
И вы в конечном итоге:
some-commit---0'---1'---2'---HEAD(feature-branch)
Git не будет дублировать (хотя я не могу точно сказать, в какой степени) коммит 0 при ребазинге.
Примечание: все хеши коммитов меняются, начиная с коммита, который мы изначально намеревались изменить.