如何在合并之前找到最后一个git提交

时间:2017-01-13 06:50:47

标签: git

在我使用git从一个工作分支合并到我的主分支后,我有时想在合并发生之前找到找到master上的最后一次提交。我该怎么做?

8 个答案:

答案 0 :(得分:8)

合并后确定提交的快速方法是使用reflog

假设最后一次出现的操作是合并,那么:

git log HEAD@{1} -1

HEAD@{1}指的是上一次操作之前的前一个HEAD,因此您可以使用log和reflog来解决它。

git log将显示当前分支中的提交序列,因此在合并之后它将始终是合并提交,并且在它将从合并分支提交之前。 git reflog显示存储库中的操作序列(例如merge,rebase)。正如文档中所解释的那样:

  

引用日志或" reflogs",在本地存储库中更新分支和其他引用的提示时进行记录。 Reflog在各种Git命令中很有用,用于指定引用的旧值。

答案 1 :(得分:4)

快速执行此操作的方法是键入

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

然后只需按下右侧的图表,直到找到合并点。你也可以

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

将输出放入文件temp.txt,您可以在编辑器中打开该文件,并使用搜索工具查找合并等文本。

这种方法有助于回答许多关于你最新提交的谱系的其他问题,所以已经提出

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

在我的.bash_profile文件中,所以我可以使用```git_log``来查看这些信息。

答案 2 :(得分:3)

如果您已将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^ 的状态是此提交的第一个父级:

*

答案 3 :(得分:1)

git log -1

另请参阅git log --helphttps://git-scm.com/docs/git-log

答案 4 :(得分:1)

仅获取合并点提交ID:

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

答案 5 :(得分:0)

如果您知道合并提交的顺序,则可以使用以下命令:

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

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

  

如果提交是合并的,并且如果pretty-format格式不是oneline,email或raw,则在Author:行之前插入另一行。该行以“ Merge:”开头,并打印祖先提交的sha1,以空格分隔。

答案 6 :(得分:0)

这是一个程序化解决方案。我们查询以下内容以获取合并发生之前的主提交的哈希值:

git merge-base master master~1

如果最后一个PR是合并文件,则master~1属于PR。 merge-base获取公共祖先的SHA,这将由于PR的结构而成为先前的主提交。

如果最后一个PR是壁球,那么master~1就掌握了,这就是我们想要的。由于这次master~1master的父提交,因此git merge-base master master~1获得了共同祖先,因此正确返回了master~1的SHA。

使用SHA,我们可以使用git log等获取有关提交的其他详细信息。

请注意,如果有许多PR合并而没有先重新定位到最新的主服务器,则这可能不会给我们最后一次主服务器提交。但是,这与OP想要的一致,即合并之前的最后一个主提交

答案 7 :(得分:0)

正在研究相同的内容,这就是我想出的:

git log --merges -1 --format='%p' | awk '{print $2}'

说明:

  • --merges – 仅显示合并提交(最小父项为 2 的提交)
  • -1 – 仅显示最后一行日志
  • --format='%p' – 显示缩写的父提交哈希