根据我的理解,我们一直在用 Git 做一个非常标准的分支模型的项目,描述如下:http://nvie.com/posts/a-successful-git-branching-model/
我们从“master”开始,从它分支“develop”。有很多提交到“开发”,然后我们从“开发”中分支出“release-1”。有一些提交到“release-1”,然后我们将“release-1” merge 到“master”,然后再次将“release-1” merge 到“develop”。然后我们删除了“release-1”。
现在我希望“master”和“develop”分支在同一点。他们确实有相同的文件,但根据分支图,他们有完全不同的历史,唯一的共同点是存储库中的第一个提交。
所以两个问题:
1) 为什么他们没有相同的历史/为什么他们不在同一点?
2) 我们如何修复它?我们应该强制 merge “develop”到“master”还是“master”到“develop”?
最佳答案
正如 LeGec 所说,提交是由各种信息生成的,包括 author, committer, parent commit, and more这应该使它独一无二/可识别。
从你的描述来看,你的情况是这样的:
Master | M1 -------------------------> M2 (merge commit)
-------- \ /
Release | \ R1 -> R2
-------- \ / \
Develop | D1 -> D2 -> D3 --------> D4 (merge commit)
正如您在案例中所描述的,M2 和 D4 中的文件将是相同的,但是它们的父提交以及它们的创建时间将不同。
这不太可能给您带来问题,因为您的工作将在 develop
上继续进行,下次您可以愉快地遵循发布工作流程。由于您不是独立地提交 master
,因此您不应遇到 merge 冲突。
如果你想“修复它”,也就是给他们一个共同的提交,你可以将 master
merge 到 develop
中,但这不会给你带来任何好处除了额外的 merge 提交。
Master | M1 -------------------------> M2 (merge commit)
-------- \ / \
Release | \ R1 -> R2 \
-------- \ / \ \
Develop | D1 -> D2 -> D3 --------> D4 -> D5 (merge commit)
请注意,这是假设您没有执行快进 merge 。
关于git - Git 来回 merge 后,为什么分支不在同一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508729/