【发布时间】:2015-07-05 04:29:56
【问题描述】:
我在 Git 中有两个主要分支:master 和 dev。
我的分支结构如下所示:
B-->E-->F-->G (master branch)
B-->C-->D-->H-->I-->J-->K (dev branch)
在我执行合并之前,master 和 dev 有一个共同的父级 B。
在 master 的提交 E、F 和 G 中,我错误地删除了一些文件(比如 foo 和 bar),而它们仍然存在于提交 C 之后的 dev 分支中。
结果,当我通过创建提交L 执行三路合并以加入G 和K 时,L 不再包含 foo 和 bar! Git 并没有以任何方式通知我他们的失踪。
在我看来,因为 E、F 和 G 在提交后被简单地重播了 C 因此 foo 和 bar 消失了。
Git 合并的这种行为对我来说很奇怪。因为我无法知道是否有人从另一个分支中删除了某些文件。
我不应该在合并时至少收到有关任何冲突修改的通知吗?
【问题讨论】:
-
I was not notified by Git in any way about their disappearance.git merge 的输出显示正在应用的更改。 -
为什么您认为在一个分支上删除而另一个分支上未触及的文件之间存在冲突?合并的重点是:以包含在任一分支上所做的所有更改的结果结束。因此,重新提交的提交从一个分支中删除,因为在另一个分支上没有对其进行任何冲突。
-
如果是这样,那么将A合并到B和将B合并到A有什么区别?由于两次合并都将得出一个包含对 A 或 B 所做的所有更改的结果。