我有一个主分支和 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
答案 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有更多详情。