Типичный коммит слияния будет показан как показано ниже в выводе команды git log
.
commit dddfd0b6d529bfcdcd6515555ea1dcf186fe338
Merge: 6b5619b 40ad694
Author: Raja Anbazhagan <raja.anbazhagan@example.com>
Date: Fri Jun 7 03:11:23 2019 +0530
Merge branch 'xyz' into 'develop'
Здесь вы можете видеть, что вторая строка содержит два коротких хэша. 6b5619b
и 40ad694
. Оба из них - самые верхние коммиты из ветвей, которые были объединены.
Здесь 6b5619b
- это самый верхний идентификатор коммита ветви develop
. И 40ad694
является самым верхним коммитом ветви функции xyz
.
Я говорю вам все это потому, что эта информация важна для того, что я собираюсь объяснить дальше.
Когда вы сбрасываете или отменяете коммит, он пытается выяснить, что изменилось в этом коммите, сравнивая его с коммитом-предком.
В этом случае есть два предка 6b5619b
и 40ad694
, и GIT теперь не уверен, от какого предка он должен найти разницу.
В этих случаях пользователь должен будет предоставить соответствующий идентификатор родительского коммита для продолжения процесса. Это делается с помощью флага -m, за которым следует порядковый номер, представляющий, где находится идентификатор родительского коммита в коммите слияния.
для моего образца слияния, возможные значения -m: 1 и 2. 1 для 6b5619b
и 2 для 40ad694
.
Так что, если вы хотите вернуть свой код в свою ветку разработки, вам нужно сделать
git revert -m 1 <merge-commit>
С -m 1
возврат git происходит по релевантности для развивающейся ветви (первого родителя слияния). Передача -m 2
приведет к возврату в соответствии с ветвью объекта xxx
В общем случае -m 1
- это тот, который вы должны использовать. Но это не так для всех случаев.