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 是功能分支上的提交,其中包含有问题的文件。
- D 是主开发分支上的提交,不包含该文件。
- M是合并提交,将开发分支合并到功能分支。
如果我签出 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 的差异并将它们显示为单独的补丁(或您选择的任何显示模式)。
我在git遇到过这种情况:
-F--M--F1-->
/
/
-D--D1-->
- F 是功能分支上的提交,其中包含有问题的文件。
- D 是主开发分支上的提交,不包含该文件。
- M是合并提交,将开发分支合并到功能分支。
如果我签出 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 的差异并将它们显示为单独的补丁(或您选择的任何显示模式)。