合并时,Git 是否只考虑提交的时间戳而不是它属于哪个分支?

lix*_*ang 4 git github

我在 Git 中有两个主要分支:masterdev.
我的分支结构如下所示:

B-->E-->F-->G (master branch)

B-->C-->D-->H-->I-->J-->K (dev branch)
Run Code Online (Sandbox Code Playgroud)

之前,我进行了合并,masterdev有一个共同的母公司B
在提交EFG掌握的,我删除了一些文件(说foobar)不正确,而他们在提交仍然存在C起在dev分支。
结果,当我执行三向合并以加入GK创建 commit 时LL不再包含 foo 和 bar !Git 没有以任何方式通知我他们的失踪。

在我看来,由于EFG进行了简单的重播后提交C因此foobar都不见了。

Git 合并的这种行为对我来说很奇怪。因为我无法知道是否有人从另一个分支删除了一些文件。
我不应该至少在合并时收到有关任何冲突修改的通知吗?

Von*_*onC 5

我不应该至少在合并时收到有关任何冲突修改的通知吗?

在这种情况下,无:合并devmaster从报告修改dev(由于共同的祖先B)到master
这里foo和酒吧都没有修改dev,因为B。从B. 有没有冲突(如果foobar地方在不修改dev):这两个文件不会被合并(没有从应用而言dev),并在保持不变master(意味着删除)。

您可以预览合并

git checkout master
git diff  --name-status dev
Run Code Online (Sandbox Code Playgroud)

那将列出已删除的文件。

你能给我一些关于 Git 如何决定在合并期间重放哪些提交的指示吗?

Git在合并时不会“重放”提交(仅rebase):它只考虑两个分支 HEAD(和共同的祖先)。

https://git-scm.com/book/en/v2/book/03-git-branching/images/basic-merging-1.png

Git 创建一个新的快照,该快照由这个三向合并产生,并自动创建一个指向它的新提交。这被称为合并提交,它的特殊之处在于它有多个父级。

https://git-scm.com/book/en/v2/book/03-git-branching/images/basic-merging-2.png