我如何检查git日志中的";快进”;合并

我如何检查git日志中的";快进”;合并,git,Git,在下面的示例中,是否有方法知道发生了合并?看git日志,我说不出我合并了 # setup example directory $ mkdir test $ cd test $ git init $ touch a $ git add a $ git commit -m "1" # switch to different branch $ git checkout -b topic $ touch b $ git add b $ git commit -m "2" # go back to m

在下面的示例中,是否有方法知道发生了合并?看git日志,我说不出我合并了

# setup example directory
$ mkdir test
$ cd test
$ git init
$ touch a
$ git add a
$ git commit -m "1"

# switch to different branch
$ git checkout -b topic
$ touch b
$ git add b
$ git commit -m "2"

# go back to master and merge
$ git checkout master
$ git merge topic

# git log

commit cccc64de3947828f487a8ce3c3e72b0f68dc88c3
Author: none
Date:   Fri May 20 05:54:45 2011 -0700

    2

commit a5d57454295759609d91a60219002e74016eed2b
Author: none
Date:   Fri May 20 05:54:29 2011 -0700

    1

在这种情况下,git发现可以进行所谓的“快进”合并,因为您正在合并的分支已经包含当前分支中的所有内容——它不需要在提交图中创建新的提交来连接两个分支

如果您不喜欢这种行为,并且希望创建一个合并提交,即使在可以进行快速转发的情况下,您也应该在另一个分支中合并:

git merge --no-ff topic
但是,如果您确实需要知道是否发生了合并,可以在“reflog”中找到该信息。例如,在您的情况下,
git reflog
将产生以下输出:

1eecbcb HEAD@{0}: merge topic: Fast-forward
193ae5e HEAD@{1}: checkout: moving from topic to master
1eecbcb HEAD@{2}: commit: 2
193ae5e HEAD@{3}: checkout: moving from master to topic
193ae5e HEAD@{4}: commit (initial): 1

。。。这显示了
头部最近是如何改变的,以及是什么动作导致了这种情况的发生。然而,依赖reflog通常是一个坏主意,除非在特定情况下,例如从错误中恢复-最好只考虑提交图,并使其代表您所做的事情
git merge--no ff
是很多人喜欢的一种方法。

如果您想尝试一个真正合并的案例,可以在
git checkout master
之后运行以下命令:

touch c
git add c
git commit -m "3"
git merge topic

也就是说,向主分支添加提交。然后提交图不再是线性序列,必须从多个分支合并数据。

您可以使用git merge base:

git merge-base master topic
它将显示cccc64de3947828f487a8ce3c3e72b0f68dc88c3的提交

或者您可以使用:

git show $(git merge-base master topic)

谢谢,那很有帮助。看起来git reflog只显示我的本地活动。我正在使用GitHub——有没有办法知道是否有其他人进行了快进合并?@suravi没有,除非他们告诉你。快进合并就像根本没有合并一样。谢谢,这非常有用,但正如您所说的,快进合并发生在两个分支代码相同的情况下,对吗?找到合并发生在哪里的好方法,但对if没有多大帮助,因为在这种情况下,您不知道主题分支的名称。