Git: Найти (будущего) родителя текущего слияния - PullRequest
1 голос
/ 02 июля 2019

У меня есть текущее слияние, которое я не завершил - репо все еще находится в состоянии "MERGING", файл MERGE_HEAD существует.Теперь я больше не знаю, какие именно ревизии я пытаюсь объединить - ну, через git log Я знаю название ревизии и ветвь, в которой я нахожусь, поэтому я знаю этого родителя - но это другой (будущий)родитель я скучаю.

Конечно, история команд в моей консоли не достаточно длинная, чтобы по-прежнему содержать использованную мной команду git merge - она ​​давно забыта.

git status только говорит мне: «Все конфликты исправленыно вы все еще сливаетесь. ".

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Вы можете использовать

git log --merge -p

для отображения различий коммитов, не общих для всех объединяемых веток ( source ).Там вы можете видеть SHA коммитов последних коммитов, указанных ветвями.

EDIT: Вы также можете напечатать идентификатор коммита, с которым вы объединяетесь, используя cat .git/MERGE_HEAD

1 голос
/ 02 июля 2019

Файл MERGE_HEAD содержит ответ в простой форме.На самом деле он содержит только это.

Если существует какая-либо команда git для отображения своего содержимого из консоли, я был бы рад узнать и распределить точки.

0 голосов
/ 02 июля 2019

чтобы избавиться от статуса «Все конфликты исправлены, но вы все еще объединяетесь».git merge --continue

позволяет прервать текущее слияние (и вернуться к тому, что вы называете (будущим) родителем), которое вы можете использовать git merge --abort.Это всегда хороший вариант, потому что вы можете просто начать все сначала с

, чтобы увидеть, что случилось с вашим репо до использования слияния git reflog каждая строка - это один шаг, который git сделал для вас:

Haass@LAPTOP-ETDGT1PT MINGW64 /c/devel/inventory (master)
$ git reflog
398e725 (HEAD -> master, upstream/master) HEAD@{0}: reset: moving to upstream/master
8700bfd (origin/master, origin/HEAD) HEAD@{1}: checkout: moving from 398e72552f3300d0389426b17feae6543305156f to master
398e725 (HEAD -> master, upstream/master) HEAD@{2}: checkout: moving from master to upstream/master
8700bfd (origin/master, origin/HEAD) HEAD@{3}: rebase finished: returning to refs/heads/master
8700bfd (origin/master, origin/HEAD) HEAD@{4}: rebase: checkout refs/remotes/origin/master
be73d62 HEAD@{5}: reset: moving to HEAD

Похоже, это так.Перед слиянием всегда есть проверка, поэтому идите сверху вниз и найдите первую проверку.Первый столбец - это git-хеш, который вы можете использовать для проверки.

В таких ситуациях мне нравится git tag мои шаги, чтобы я мог вернуться к любому промежуточному шагу всякий раз, когда я теряюсь в некоторых действиях git

...