当我使用Git从一个工作分支合并到主分支后,有时候我想查找合并发生之前在主分支上的最后一次提交。我该怎么做?
确定合并后的提交的快捷方式是使用reflog。
假设最后执行的操作是合并,则:
git log HEAD@{1} -1
HEAD@{1}
指代上一次操作之前的 HEAD,因此您可以使用日志和 reflog 来引用它。
git log
显示当前分支中提交的序列,所以在合并后它总是一个合并提交,在它之前是来自合并分支的提交。git reflog
显示仓库中操作的序列(例如合并、变基)。正如文档中所解释的:
引用日志或 "reflogs" 记录本地仓库中分支和其他引用的 tip 在何时被更新。在各种 Git 命令中,reflogs 非常有用,可以指定引用的旧值。
一个快速的方法是输入
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```命令来查看这些信息。
git log -1
? - mallaudinbranch
合并到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^
git merge-base master master~1
master~1
指的是该合并请求的归属分支。使用merge-base
获取共同祖先的SHA值时,因为PR的结构,它将是前一个主分支提交的SHA值。master~1
位于主分支上且正是我们想要的。这次 master~1
是master
的父提交,所以用 git merge-base master master~1
获取共同祖先并正确返回master~1
的SHA值。git log
等命令获取提交的其他详细信息。要获取仅合并点的提交ID:
最初的回答:
git rev-list origin..HEAD --max-parents=1 --max-count=1
Merge: abcdefg 1234567
中第一个(abcdefg
)值。git rev-parse HEAD^
(^
=^1
,第一个父级)。例如,如果您执行git checkout master
,然后git merge other-branch
,那么git rev-parse HEAD^
将是master
的上一个HEAD
。(其中git rev-parse HEAD^
,git show HEAD^
和git log HEAD^ -1
在使用上下文HEAD^
时是等效的)。HEAD^
,HEAD^^
,HEAD^^^
,...,这可以通过向git log
添加--first-parent
来实现 ~ 因此,如果您只想查看master
的先前HEAD
的顺序,则可以这样做。git log master --oneline --first-parent --pretty=format:'%H : %s'
alias mainline="git log master --oneline --first-parent --pretty=format:'%H : %T'"
alias maindiff="git diff $(git rev-parse master^1)..$(git rev-parse master) --stat"
当前合并的分支的最后提交SHA:
git rev-list HEAD^1..HEAD --max-parents=1 --max-count=1
$ git log -n 1 --pretty | grep Merge | head -1 | awk '{print $2}'
如果提交是合并的,并且如果漂亮格式不是oneline、email或raw,则在Author:行之前插入一行附加行。该行以"Merge:"开头,后面跟着祖先提交的sha1值,用空格分隔。我也在研究这个问题,以下是我的结论:
git log --merges -1 --format='%p' | awk '{print $2}'
说明:
--merges
– 仅显示合并提交(即父节点数为2的提交)-1
– 仅显示最后一行日志--format='%p'
– 显示缩写的父提交哈希值
git log -1
命令,它会显示所选分支的最后一次提交的详细信息。同样,git log -2
命令会显示最近两次提交的详细信息。 - Abhi