git merge commit 删除文件,但 `git show SHA` 不显示它们被删除

git merge commit removes files, but `git show SHA` doesn't show them being removed

我在git遇到过这种情况:

-F--M--F1-->
   /
  /
-D--D1-->

如果我签出 F,我会看到该文件。 如果我签出 M,文件就不见了。

但是 git show --name-status M 没有显示正在删除的文件。相反,它在状态列中显示了另外两个带有 'MM'(字面意思)的文件,这意味着双方在合并中都有更改。

这是怎么回事?如何在提交 M 中删除文件而不 git 将其显示为已删除?

您可能将主分支合并到功能分支中,而不是相反
所以文件只对F

可见

git show 合并提交非常特别。仅显示与两个 parent 不同的文件。在您的情况下,删除的文件与 parent 之一“相同”(即,它在一个 parent、D 中被删除,并在结果 M 中被删除]), 所以没有显示。

a mode可以帮助:

git show -m M

这会计算每个 parent 的差异并将它们显示为单独的补丁(或您选择的任何显示模式)。