如何查看git log以进行“快进”合并?

时间:2011-05-20 13:04:38

标签: git

在以下示例中,有没有办法知道合并发生了?看着git log,我不知道我合并了。

# 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

3 个答案:

答案 0 :(得分:12)

在那个例子中,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

...它向您展示了HEAD最近是如何更改的,以及导致这种情况发生的原因。但是,依赖于reflog通常是个坏主意,除非在特定情况下,例如从错误中恢复 - 最好只考虑提交图,并使其代表你所做的事情。 git merge --no-ff是一种很多人喜欢的方法。

答案 1 :(得分:1)

您可以使用git merge-base:

git merge-base master topic

它将显示cccc64de3947828f487a8ce3c3e72b0f68dc88c3(2)提交

或者您可以使用:

git show $(git merge-base master topic)

答案 2 :(得分:0)

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

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

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