Так как вы здесь хозяин своего корабля (переписывание истории разрешено, как вы упомянули), я бы предложил интерактивный перебазирование здесь *.( doc )
И перед запуском , поскольку это сложная операция, как напомнил Lasse Vågsåther Karlsen прямо под , настоятельно рекомендуем вамсделайте резервную копию вашей ветви (например, git branch <backupBranch> <originalBranch>
).
Сначала выполните поиск хэшей SHA-1 двух коммитов (удаление и удаление) до git log
.(Я предполагаю, что вы можете сделать это, но не стесняйтесь спрашивать подробности об этой части, если это необходимо.)
Затем с
git checkout <yourBranch>
git rebase -i <deletionCommit>^
(обратите внимание, чтобы начать интерактивный переход отФиксация всего за до фиксации удаления)
вы получите открытый редактор со списком коммитов из указанной точки в HEAD, которому предшествует ключевое слово:
pick 295ea4a Some commit message
pick 9cb2b54 Some other commit message
pick fe91df1 Yet another commit message
Теперь измените pick
на drop
для двух коммитов, которые нужно отбросить, и закройте / сохраните редактор.
И завершите перебазирование с помощью
git rebase --continue
(если что-то пойдетвбок, используйте git rebase --abort
, чтобы восстановить вещи непосредственно перед началом перебазировки)
И, наконец, не забывайте, что вам понадобится git push -f <remote> <branch>
в следующий раз, чтобы обновить старый ref, так как каждый коммит вниз по линии будетбыть другим, будь то только по указанию их родителей.
* (потому что через 2 месяца у вас может быть достаточное количество коммитов, поэтому git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>
может быть очень утомительным, иинтерактивная перебазировка в основном автоматизирует именно это)