我在Git中有两个主要分支:master
和dev
我的分支结构如下所示:
B-->E-->F-->G (master branch)
B-->C-->D-->H-->I-->J-->K (dev branch)
在执行合并之前,master
和dev
有一个共同的父B
。
在提交的E
,F
和G
的提交中,我删除了一些文件(比如foo
和bar
),但它们仍然存在于提交{{1在C
分支开始。
因此,当我通过创建提交dev
执行三向合并以加入G
和K
时,L
不再包含foo和bar! Git没有告知我他们失踪的任何方式。
在我看来,因为L
,E
和F
只是在提交G
后被重播,因此C
和foo
消失了
Git merge的这种行为对我来说很奇怪。因为我无法知道是否有人从另一个分支删除了一些文件 在合并时,我不应该至少收到有关任何冲突修改的通知吗?
答案 0 :(得分:4)
在合并时,我是否应该至少收到有关任何冲突修改的通知?
在这种情况下,否:合并"C:\Program Files\xxx\phpar2.exe" c -r5 -b3000 "C:\Users\xx\Desktop\xxx\*.rar"
到dev
会报告master
(自共同祖先dev
)到B
的修改。
自master
以来,foo和bar在dev
中未修改。从B
开始,它们在master中被删除了。没有冲突(如果B
和foo
未在bar
中修改):这两个文件与合并无关(无法从dev
应用),以及在dev
(意味着删除)中保持不变。
你可以preview a merge使用:
master
那将列出已删除的文件。
你能否给我一些关于Git如何决定在合并期间重播哪些提交的指示?
Git没有"重播"提交when merging(仅when rebasing):它只考虑两个分支HEAD(和共同的祖先)。
Git会创建一个由此 three-way merge 生成的新快照,并自动创建一个指向它的新提交。这被称为合并提交,并且特殊之处在于它具有多个父级。