快速合并到另一个分支,不会创建任何提交记录

时间:2013-06-15 05:39:16

标签: git git-branch git-merge

我有一个分支和 debug 分支。他们是一个分开的承诺。 debug 分支从 master 分支并具有一个提交。当我合并它们时,git fast-fowards master 分支到 debug 分支,而不是像我熟悉的那样创建另一个提交。它缺少一些来自主分支的信息,即注释(在合并后变为HEAD ^)。我有几个问题:

为什么它不会创建另一个带有表示已合并分支的注释的提交? 快进的标准是什么?
我是否应该对快速合并并且每次检查都是偏执的? 我认为.gitconfig文件中没有任何可能影响行为的内容:

[merge]
    tool = fugitive
[push]
    default = upstream
[diff]
    tool = vimdiff
[mergetool "fugitive"]
    cmd = vim -f -c \"Gdiff\" \"$MERGED\"
[difftool]
    prompt = false

1 个答案:

答案 0 :(得分:1)

Git将默认执行快进合并,当您将当前提交的提交作为父项合并时(Git提交(几乎)始终包含指向其父级的指针,即前任(s) )。

这里,提交A正在开发,B在主服务器上

C      <---       B      <---   A
older stuff       master        develop

快进合并后(git checkout master; git merge develop):

C      <---       B      <---   A
older stuff                     develop
                                master

在这种情况下,不存在冲突。

将此与更复杂的合并进行比较

C - B'
  \ 
    A'

这里B'和A'可以在相同的位置引入更改,因此可以发生冲突,手必须能够在合并提交中解决M

C - B'-M
  \   /
    A' 

如果您不想使用默认的快进合并行为,可以使用--no-ff开关。上面第一个例子中的git merge --no-ff develop会产生。

C - B  -  M (master)
     \   /
       A
       develop

M是强制的合并提交。硕士在M,发展在B。

人们实际上对于快进的合并更倾向于偏执,因为它们有可能产生错误的冲突。如果您希望确保仅在快进的情况下才进行合并,您可以执行git merge --ff-only develop

因此,您看到的Git行为是标准的,您的.gitconfig没有任何问题。

This answer有更多详情。