Как найти последний коммит на ветке перед данным коммитом слияния - PullRequest
0 голосов
/ 22 мая 2018

У меня есть ветвь, разработка, к которой я присоединился несколько дней назад, используя хеш коммита 92dd09b .

Для ясности, вот изображение моего коммита в расширениях Git: enter image description here

Учитывая этот хеш, мне нужно найти предварительный коммит в ветке разработки до моего слияния.Как мне поступить так?

Если я проверю свой хеш коммита, журнал git покажет предыдущие коммиты на моей ветке, а не на разработке.

Я посмотрел на это этовопрос , затем я проверил свой хеш слияния ( 92dd09b ) и запустил эту команду:
git log HEAD @ {1} -1

Но я получаю ошибку:fatal: неоднозначный аргумент 'HEAD @': неизвестная ревизия или путь не в рабочем дереве.

Я использую Git для Windows.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Судя по комментариям, мне кажется, что я неправильно понял ваш вопрос относительно того, что определяет 92dd09b.Я сохранил свой первоначальный ответ ниже, чтобы разговоры с комментариями не стали еще более запутанными.Но, исходя из моего текущего понимания, у вас действительно есть

                              ... x
                                   \
x -- x -- x -- A -- 92dd09b -- x -- M2 -- x <--(develop)
                   /
         ... x -- B <--(branch)

В этом случае то, что вы пробовали в первую очередь (checkout 92dd09b, запустите git log), должно показать коммиты из обеих веток;Вы можете исключить коммиты из ветви "слияния", сказав

git log --first-parent

Или, в ответ на PhD, вы можете сказать

git show 92dd09b~

(среди прочего).

Ваши комментарии указывают на то, что это не привело вас к правильному коммиту, однако это говорит о том, что что-то неправильно наблюдается.


Итак, насколько я понимаю, у вас возникла ветвь разработки

x -- x -- x -- A <--(develop)

и у вас была другая ветвь

x -- x -- x -- A <--(develop)

   ... x -- 92dd09b <--(branch)

, и вы объединили 92dd09b в develop

x -- x -- x -- A -- M1 <--(develop)
                   /
   ... x -- 92dd09b <--(branch)

, и теперь, возможно, произошла еще какая-то работа

                        ... x
                             \
x -- x -- x -- A -- M1 -- x -- M2 -- x <--(develop)
                   /
   ... x -- 92dd09b <--(branch)

Итак, теперь вы хотите найти A.

Как правило, коммиты облегчают поиск «назад во времени»;не так легко смотреть вперед.Если вы начинаете с 92dd09b, вам нужно «смотреть вперед», чтобы перейти к M1, а , а затем оглядываться на A.

Так что это не так просто, как ваммог бы надеяться.Но это может быть сделано.Вы можете начать с

git log --merges --format=%p develop

Это даст вам списки родителей для каждого коммита слияния в develop, по одному в каждой строке.Таким образом, вы можете отфильтровать это любым количеством способов.

git log --merges --format=%p develop |grep 92dd09b$ |cut -d" " -f1

должен напечатать сокращенный хеш «другого» родителя M1, который должен быть A.(Предполагая, что это не слияние осьминога, и если вы слили 92dd09b в develop, а не наоборот.)

0 голосов
/ 22 мая 2018

Во-первых, вам не нужно извлекать слияние, поэтому давайте вернемся к разработке:

git checkout develop

Чтобы получить предыдущий коммит из известного хеша:

git show 92dd09b~

ТамЕсть много разных способов навигации по истории, присваивая один коммит другому: https://git -scm.com / docs / gitrevisions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...