git - Git 来回 merge 后,为什么分支不在同一点?

标签 git branching-and-merging

根据我的理解,我们一直在用 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/

相关文章:

git - 我想更改上一次提交的 Git 提交消息

git - 如何使 'git gc' 的 git 别名工作

svn - 如何阻止分支中的 subversion 修订版重新集成到主干中?

git - 如何忽略 Git merge 中的文件?

git - 在 git 中取消暂存新文件部分的最快方法是什么?

linux - 如何将 AllowTcpForwarding 设置为 no 进行 ssh 转发?

git - 当我的新功能依赖于之前的更改时,我应该从分支分支还是创建标签?

sql-server - 如何通过SQL确认分支是否被合并?

git - 我们真的需要在 Git 中分支吗?

git - git 中开发分支和生产分支之间的差异存储在哪里?