如何仅列出 git 中的自动合并文件

How to list only auto merged files in git

拉取后是否有任何命令仅列出 git 中的自动合并文件。自动合并并不强迫我们看代码。有时我需要明确检查自动合并的文件。

Git 将修改后的文件混入三种类型。新文件出现或旧文件被删除,自动合并和 conflict.if git 内部识别自动文件所以我只是认为会有任何命令只列出自动合并 files.by 我想要的方式合并提交之前的这个列表。

为清楚起见,让我们从一些定义和注释开始:

  • 要执行合并,git 必须找到 "merge base",它(非常松散地)是 "a commit at which the current branch and the to-be-merged branch share development history"。
  • 您现在正在进行合并,并且使用了 --no-commit 或发生了合并冲突。如果是后者,你还没有解决这些冲突。
  • 因此,您的 work-tree 有准备提交的文件,但您实际上还没有提交。
  • 合并一旦提交,就会有两个父提交。一个是 您在进行合并提交之前所在分支的尖端的提交。由于您尚未进行合并提交,因此您当前的 HEAD 提交现在是该分支的尖端。所以下面的短语 "the HEAD commit" 表示 "the tip of the branch before doing the merge".
  • 同时,我们还需要一个简短的单词或短语来表示来自 to-be-merged-in 分支的提交(它将成为第二个父级)。我将其称为 "inbound" 提交。 (我没有在其他地方看到过这个词,是我翻了一些同义词库词条后编出来的。)

根据您的 comment-reply,我相信您希望找到在 HEAD 提交中有 任何 更改的文件,即那些已选择的文件从入站提交中提取任何更改,无论 git 是否已合并这些更改而没有发现冲突。

如果这是正确的,答案很简单:

git diff --cached --name-only

将列出它们。 (这有点令人惊讶,因为没有 --name-onlygit diff --cached 不会 显示未合并的文件。)

是否只希望文件 git 已(或认为已)成功合并:

git status --porcelain | awk '/^M / { print  }'

将列出这些。 (省略 awk,并可选择使用 -s--short 而不是 --porcelain,以查看 git status 的输出。在这种情况下,我们查找文件其状态为 "merged, ready to commit"。具有合并冲突的文件将处于 M 状态。)

您可能还想将文件与其 merge-base 版本进行比较。这并不太难 除了 在多个 merge-base 的情况下(有点罕见)。不过,我会将这些细节从这个答案中删除。