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

Обратите внимание, что переписывание публичной истории (истории репо, которой делятся с другими) - плохая привычка. Вам следует переписать предыдущие коммиты, только если они еще не опубликованы.

Другие вопросы по тегам