Как удалить случайный двойной коммит [Git] - PullRequest
2 голосов
/ 23 сентября 2019

Я ищу способ удалить «двойной» коммит, который я случайно создал в репо.Пытаясь свернуть коммиты ветки перед тем, как объединить ее с мастером, я невольно перенес изменения ветки на мастера (я знаю, что Git достаточно, чтобы выстрелить себе в ногу).Позже, когда я слил ветку, я получил второй коммит (слияние).Изменения в этом коммите слияния точно такие же, как и в случайно выдвинутом коммите.Теперь моя история мастер-коммитов выглядит примерно так:

Some_Newer_Stuff_Here
The_Merge_Commit
The_Branch_Commit //Same contents, different Hash as commit above
Master_Commit_2
Master_Commit_1

Я пытался использовать git Interactive ReBase (как подробно здесь и здесь ), однако, когда яСделайте так, не все коммиты появятся в списке.Вместо этого я вижу что-то вроде этого:

Some_Newer_Stuff_Here
The_Branch_Commit
Master_Commit_2

The_Merge_Commit отсутствует (я предполагаю, что это тот, который я хочу сохранить).Обратите внимание, что все коммиты отображаются в git log.Если я попытаюсь удалить The_Branch_Commit, используя rebase, это создаст кучу конфликтов слияния.

Я не смогу найти способ решить эту проблему, поэтому любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 сентября 2019

Без дополнительной информации о коммите я не могу дать вам конкретные пошаговые инструкции.Но я подумал, что мог бы потенциально ответить на один из аспектов вашего вопроса.

Причина, по которой The_Merge_Commit не отображается в интерактивной перебазировке, заключается в том, что команда git rebase по умолчанию игнорирует коммиты слияния, а непредпочитая накладывать коммиты один поверх следующего.

Однако вы можете изменить это поведение с флагом --preserve-merges.Добавление этой команды к git rebase -i приведет к появлению The_Merge_Commit на странице редактора, после чего вы сможете удалить The_Branch_Commit.Но все еще существует вероятность возникновения раздражающих конфликтов слияния.

git rebase -i --preserve-merges <HASH-OF-COMMMIT-BEFORE-INCIDENT>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...