在Git中,来回合并后,为什么分支不在同一点?

Vyt*_*tas 2 git branching-and-merging

根据我的理解,我们一直在用Git做一个项目,这是一个非常标准的分支模型,如下所述:http://nvie.com/posts/a-successful-git-branching-model/

我们从"大师"开始,从中分支"发展".有许多提交"开发",然后我们从"开发"分支"发布-1".有一些提交"release-1",然后我们将"release-1"合并为"master",并再次将"release-1"合并为"develop".然后我们删除了"release-1".

现在我希望"主"和"开发"分支处于同一点.并且它们确实具有相同的文件,但根据分支图,它们具有完全不同的历史记录,唯一的共同点是存储库中的第一个提交.

所以有两个问题:

1)为什么他们没有相同的历史/他们为什么不在同一点?

2)我们如何解决它?我们应该强制合并"发展"到"掌握"或"掌握"到"发展"吗?

Chr*_*ris 5

正如LeGec所说,提交是从包括作者,提交者,父提交等在内的各种信息生成的,这些信息应该使其具有唯一性/可识别性.

根据您的描述,这听起来像是你的情况:

Master  | M1 -------------------------> M2 (merge commit)
--------    \                          /
Release |    \                R1 -> R2
--------      \              /         \ 
Develop |      D1 -> D2 -> D3 --------> D4 (merge commit)            
Run Code Online (Sandbox Code Playgroud)

正如您在案例中所描述的那样,M2和D4中的文件将是相同的,但是他们的父提交,以及它们的创建时间将是不同的.

这不太可能导致您的问题,因为您的工作将继续,develop并且您可以愉快地遵循下次发布工作流程.由于您不是master独立承诺,因此不应遇到合并冲突.

如果你想"修理",就是给他们一个共同的承诺,你可以合并masterdevelop,但它不会真正得到你任何东西,除了一个额外的合并提交.

Master  | M1 -------------------------> M2 (merge commit)
--------    \                          /   \ 
Release |    \                R1 -> R2      \
--------      \              /         \     \
Develop |      D1 -> D2 -> D3 --------> D4 -> D5 (merge commit)
Run Code Online (Sandbox Code Playgroud)

请注意,这是假设您没有执行快进合并.