Git: вернуться к слиянию

Если вы объединяете одну ветку с другой и по какой-то причине решаете, что хотите отменить слияние, есть несколько способов сделать это с помощью Git. Решение будет проще, если вы еще не отправили изменения в удаленное репо, и если вы это сделали, вам, вероятно, придется полагаться на что-то вроде git revert вместо решения, предложенного ниже. В этой короткой статье я объясню, как можно отменить слияние Git, которое еще не было запущено. Первым шагом было бы использовать reflog, чтобы найти фиксацию ri

Если вы объединяете одну ветку с другой и по какой-то причине решаете, что хотите отменить слияние, есть несколько способов сделать это с помощью 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 , которая отменит нежелательные изменения как отдельную фиксацию.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus