Git: Как обновить коммит, который не на вершине
В моей рабочей ветке у меня есть три зависимых патча. Все они не объединены.
<commit id -1>
<Commit id -2>
<Commit id -3>
Как я могу добавить новые изменения в <Commit id -2>
?
В настоящее время вот как я это делаю.
git stash
git reset --hard HEAD~1
git stash apply
git add .
git commit --amend
git cherry-pick <commit id -1>
Это работает без проблем. Но есть ли лучший способ, с помощью которого я могу зафиксировать подготовленные файлы так, как я хочу?
1 ответ
Вы можете использовать интерактивную перебазировку и редактировать нужный коммит. Что-то вроде:
git rebase --interactive abc4321d^
В редакторе поменяй pick
в edit
или же e
, Применить изменения (git stash pop
) и затем передайте их.
Таким образом, вы можете изменить несколько старых коммитов за один прогон. Чтобы продолжить перебазирование и обратиться к следующему коммиту, вы будете использовать:
git rebase --continue
В любое время, если вы чувствуете, что сделали что-то не так, вы можете отменить ребаз, используя:
git rebase --abort
Обратите внимание, что переписывание публичной истории (истории репо, которой делятся с другими) - плохая привычка. Вам следует переписать предыдущие коммиты, только если они еще не опубликованы.