Пришел к этому подходу (и он, вероятно, точно так же, как и с использованием интерактивной переадресации), но для меня это довольно просто.
Примечание. Представляю этот подход для иллюстрации того, что вы можете а не повседневную альтернативу.
Предположим, вы хотите изменить commit 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)
Rebase feature-branch
на quick-branch
(разрешить любые конфликты на этом пути). Примените stash и удалите quick-branch
.
git rebase quick-branch
git stash pop
git branch -D quick-branch
И вы получите:
some-commit---0'---1'---2'---HEAD(feature-branch)
Git не будет дублировать (хотя я не могу сказать, в какой степени) 0 commit при перезагрузке.
Примечание: все хеши фиксации изменяются, начиная с фиксации, которую мы изначально планировали изменить.