首页 > 解决方案 > Git - 检查是否在 git merge 中手动取消了某些文件

问题描述

设想:

在针对 的feature分支合并请求中development,我们可以看到feature分支从 还原了一些更改development,尽管没有显式还原或手动更改。这使我们相信feature分支中的某处可能存在不正确的合并。

我们怀疑development在早些时候合并分支feature时,其中一位开发人员意外取消了一些合并更改。

有没有简单的方法来验证是否是这种情况?

检查合并提交的详细信息时,它只显示添加到提交中的文件,但显然不显示开发人员手动取消暂存的文件。

标签: gitgitlabgit-merge

解决方案


您正在尝试检查提交内容与理论合并内容。您可以做的是空运行合并以检测冲突。

https://stackoverflow.com/a/63777004/5237940提供了执行此操作的第一个提示。您可以对其进行调整以获取在合并期间将执行的更改的完整列表:

git merge-tree <base> <commit or branch 1> <commit or branch 2> |grep -E -- ' their | our |changed |merged|added|removed'

这将为您提供如下输出:

removed in local
  their  100644 5b194c882f6f8f0d0453b5df5a798d3164e432ed README.txt
changed in both
  our    100644 4825357e4088a083f0fee644c51c32a13d6a3df3 bar
  their  100644 0984a2a7a75695e942f0d16a89dd68a988c35c3a bar
changed in both
  our    100644 be89542ce50400c455c8715f0a2d3b12ee8d9a58 foo
  their  100644 ff14dbf9569ae99b880339588b3bcbf84687f5e6 foo

要简单地获取文件列表:

 git merge-tree <base> <commit or branch 1> <commit or branch 2> |grep -E -- ' their | our ' | awk '{print $NF}' |sort -u

你得到:

bar
foo
README.txt

然后你可以使用

git diff --name-only

获取由您的真实提交修改的文件


推荐阅读