我正在开发一个项目(单独),对于我开发的每个功能,我创建了一个新的分支,处理这个功能,然后将它合并到master。所以通常我一次不会在两个不同的分支上工作,而在分支机构工作时从不接触主人。
当我合并分支时,我看到(使用gitx
和gitk
)master分支的历史记录获取了我对合并分支所做的所有提交。我的意思是,如果我有类似的东西:
master a-b-c-d
\z-x-y--
|branch name
合并后我得到:
a-b-c-d-z-x-y
|branch name
是的,我看到合并的分支名称突出显示(使用gitx
和gitk
),但我所期待的是确切地显示提交的位置(对于哪个分支),如:
master a-b-c-d--------M--
\-z-x-y-/
|branch name
所以我期待看到提交“M”代表我已经完成的合并,而不是看起来我已经完成了对新分支所做的所有提交。
我的期望是否正确?或者这是正常的git
行为?
答案 0 :(得分:30)
这是正常的Git行为。您正在进行所谓的“快进”合并,因为您的分支严格地位于master
分支之前。
如果你真的想要保留分支历史记录(虽然我建议你不要打扰),那么你可以使用git merge --no-ff
强制它创建合并提交,即使它可以进行快进更新
答案 1 :(得分:6)
您可以在“Understanding the Git Workflow”中找到对-no-ff选项的额外批评,主要是因为它会中断git blame
。
更多“fast forward when using pull
and no-ff
when pull
”。
正如“Why does git use fast-forward merging by default?”中所解释的那样,除非你在谈论一个非常长寿的分支,否则最好是fast-forward merge。