После того, как я выполнил слияние с моей веткой мастера из рабочей ветки с помощью git, я иногда хочу найти, чтобы найти последнюю фиксацию на master до того, как произошло слияние. Как это сделать?
Как найти последний git commit перед слиянием
Ответ 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^
Ответ 4
git log -1
Также см. git log --help
или https://git-scm.com/docs/git-log
Ответ 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