Отменить несколько слияний git

У меня есть две ветки git (master и fix_log_messages). Я делал различные коммиты в ветке fix_log_messages, а затем периодически сливал эти изменения/коммиты в master. В результате ветвь master содержит несколько слияний из-за периодического слияния ветки fix_log_messages с ветвью master.

Теперь мне нужно удалить все коммиты, принадлежащие ветке fix_log_messages, из основной ветки. Другими словами, мне нужно отменить несколько слияний. Я понимаю, что могу отменить одно слияние, используя git revert -m 1 <merge-commit>. Но каков будет рабочий процесс для удаления нескольких слияний в ветке?

К вашему сведению. Изменения в мастере уже были отправлены на удаленный сервер. Все слияния были выполнены с использованием git merge --no-ff fix_log_messages.


person Benjen    schedule 03.11.2015    source источник
comment
Есть ли в master коммиты, отличные от коммитов слияния, которые вы хотите сохранить? Или слияния являются единственными дополнительными коммитами на master? Подход к этим двум случаям будет совершенно разным...   -  person twalberg    schedule 04.11.2015


Ответы (1)


Вы можете использовать git log, чтобы увидеть, сколько коммитов вашей главной ветки вы хотите отменить. Если, например, вы хотите откатить 6 коммитов, просто введите:

git reset --hard HEAD~6

Если вы хотите восстановить свой объединенный статус, вы можете использовать reflog, чтобы увидеть идентификатор последнего коммита в исходной основной ветке, а затем проверить его.

person Bustikiller    schedule 03.11.2015
comment
К сожалению, это а) удалит все коммиты без слияния на мастере в этом диапазоне и б) сломает историю, если будет принудительно удалено. - person piersb; 14.11.2018