Если вы объединяете одну ветку с другой и по какой-то причине решаете, что хотите отменить слияние, есть несколько способов сделать это с помощью Git.
Решение этой проблемы проще, если вы еще не отправили изменения в
удаленное репо, и если вы это сделали, вам, вероятно, придется
полагаться на что-то вроде git revert вместо решения, предложенного
ниже. В этой короткой статье я объясню, как можно отменить слияние Git,
которое еще не было запущено.
Первым шагом будет использование reflog для поиска фиксации прямо
перед слиянием:
$ git reflog
Выполнение этого в вашем репо вернет список последних коммитов, включая
их сокращенные хэши, расстояние от HEAD и описание. Это будет
выглядеть примерно так:
$ git reflog
8135d07 [email protected] {0}: commit (merge): Merge branch local/bug-34 into local/master
03979c8 [email protected] {1}: commit: Added support for query params
9f7a993 [email protected] {2}: commit (initial): Initial commit
Как только вы найдете фиксацию, к которой хотите вернуться, используйте
команду reset , аналогичную тому, что мы делали при возврате к
предыдущей фиксации , что по сути
то, что мы делаем здесь:
$ git reset --hard <commit-hash>
Итак, в приведенном выше примере мы могли бы захотеть вернуться к фиксации с сообщением «Добавлена поддержка параметров запроса», что мы бы сделали следующим образом:
$ git reset --hard 03979c8
Параметр --hard вернет код в древовидной, промежуточной и рабочей
копиях. Если вы не хотите потерять какие-либо локальные изменения,
которые вы сделали, то --merge или --mixed могут быть лучшими
вариантами для вас.
Если фиксация, к которой вы хотите вернуться, находится только одна за
HEAD , вы можете вместо этого использовать ORIG_HEAD в качестве
ярлыка в команде reset :
$ git reset --hard ORIG_HEAD
В некоторых случаях это будет проще, так как вам не придется
использовать reflog для поиска хэша фиксации. ORIG_HEAD примерно
эквивалентен [email protected] {1} , поэтому используйте его только в
том случае, если вы хотите отменить одну фиксацию.
Примечание : после того, как вы отправили изменения в удаленное
репо, не рекомендуется возвращать коммиты таким образом, поскольку вы
стираете историю. В этом случае я бы рекомендовал использовать команду
git revert , которая отменит нежелательные изменения как отдельную
фиксацию.