Как в GIT отменить merge, чтобы при этом сохранились последние коммиты?

Создал локальную ветку для определенных задач. После завершения работы с ней сделал ее merge с master. После этого в master были сделаны три коммита уже для других задач. Как можно отменить merge, чтобы при этом сохранились эти три последние сделанные коммита после слияния?


Ответы (1 шт):

Автор решения: KoVadim

Есть два способа.

Первый - это создать коммит-откат. В истории появится ещё один коммит

git revert -m 1 <SHA of merge>

Способ рекомендованный, если изменения уже были запушены и на них что то важное завязано. Старый мердж коммит останется в истории плюс появится новый "коммит-откат"

Второй способ. Сделать ребейз

git rebase -i <SHA хеш коммита перед мержем>

В открытом редакторе (это скорее всего будет vim) удалить строку с ненужным коммитом (нажать dd или перейти в режим редактирования и классически) и сохранится (esc:wEnter)

Возможно, будут конфликты, их нужно будет решать классически. ну и не забыть запушить.

Сами коммиты сохранятся (если будут конфликты, то они как бы не совсем сохранятся - все зависит от того, как сильно они были завязаны на изменения). Хеш коммитов поменяется, так что нельзя сказать, что они "останутся такими же".

→ Ссылка