Как найти последний git commit перед слиянием

После того, как я выполнил слияние с моей веткой мастера из рабочей ветки с помощью git, я иногда хочу найти, чтобы найти последнюю фиксацию на master до того, как произошло слияние. Как это сделать?

Ответ 1

Быстрый способ сделать это - ввести

git log --pretty=format:'%h : %s' --graph

затем просто следуйте по графику с правой стороны, пока не найдете точку слияния. Вы также можете сделать

git log --pretty=format:'%h : %s' --graph > temp.txt

который помещает вывод в файл temp.txt, который вы можете открыть в своем редакторе, и используйте средство поиска для поиска текста, такого как merge.

Этот подход полезен для ответа на множество других вопросов о происхождении вашей последней фиксации, поэтому поставили

alias git_graph="git log --pretty=format:'%h : %s' --graph"

в моем .bash_profile файле, поэтому я могу просто использовать `` `git_log``, чтобы увидеть эту информацию.

Ответ 2

Быстрый способ определить фиксацию после слияния - использовать reflog.

Предполагая, что последняя произошедшая операция была слиянием, тогда:

git log [email protected]{1} -1

[email protected]{1} относится к предыдущей HEAD до последней операции, поэтому вы можете обращаться к ней с помощью журнала и reflog.

git log покажет вам последовательность коммитов в текущей ветке, поэтому после слияния она всегда будет слиянием, и прямо перед тем, как она будет совершена из объединенной ветки. git reflog показывает последовательность операций в вашем репозитории (например, merge, rebase). Как объяснено в документах:

Журналы ссылок или "reflogs", запись, когда советы ветвей и другие ссылки были обновлены в локальном репозитории. Reflogs полезны в различных командах Git, чтобы указать старое значение ссылки.

Ответ 3

Если вы уже объединили branch в master, вот один из способов найти фиксацию слияния:

#   With the ancestry-path option, 'git rev-list branch..master' (or git log)
#   will only list commits which are parents of 'master'
#   *and* children of 'branch'
#
#   If 'branch' was merged into 'master', the last commit in this list
#   is the merge commit :
$ git rev-list --ancestry-path branch..master | tail -1

Состояние master до слияния - это первый родительский фиксатор:

$ h=`git rev-list --ancestry-path branch..master | tail -1`
$ git log $h^

Ответ 5

Если вы знаете порядок фиксации слияния, вы можете использовать следующее:

$ git log -n 1 --pretty | grep Merge | head -1 | awk '{print $2}'

https://git-scm.com/docs/git-log

Если фиксация является слиянием, а симпатичный формат не является oneline, email или raw, перед строкой Author: вставляется дополнительная строка. Эта строка начинается с "Merge:" и печатаются шейсы наследственных коммитов, разделенные пробелами.

Ответ 6

Чтобы получить только идентификатор фиксации точки слияния:

git rev-list origin..HEAD --max-parents=1 --max-count=1