Как в GIT отменить merge, чтобы при этом сохранились последние коммиты?
Создал локальную ветку для определенных задач. После завершения работы с ней сделал ее merge с master. После этого в master были сделаны три коммита уже для других задач. Как можно отменить merge, чтобы при этом сохранились эти три последние сделанные коммита после слияния?
Ответы (1 шт):
Есть два способа.
Первый - это создать коммит-откат. В истории появится ещё один коммит
git revert -m 1 <SHA of merge>
Способ рекомендованный, если изменения уже были запушены и на них что то важное завязано. Старый мердж коммит останется в истории плюс появится новый "коммит-откат"
Второй способ. Сделать ребейз
git rebase -i <SHA хеш коммита перед мержем>
В открытом редакторе (это скорее всего будет vim) удалить строку с ненужным коммитом (нажать dd или перейти в режим редактирования и классически) и сохранится (esc:wEnter)
Возможно, будут конфликты, их нужно будет решать классически. ну и не забыть запушить.
Сами коммиты сохранятся (если будут конфликты, то они как бы не совсем сохранятся - все зависит от того, как сильно они были завязаны на изменения). Хеш коммитов поменяется, так что нельзя сказать, что они "останутся такими же".