4

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

Git 将更改的文件通常以三种类型混合在一起。新文件出现或旧文件被删除,自动合并和冲突。如果 git 在内部识别自动文件,所以我只是认为会有任何命令仅列出自动合并的文件。顺便说一下,我想在合并提交之前获取此列表。

4

1 回答 1

3

为了清楚这个答案,让我们从一些定义和注释开始:

  • 要执行合并,git 必须找到“合并基础”,它(非常松散地)是“当前分支和要合并的分支共享开发历史的提交”。
  • 您现在正在进行合并,并且已经使用--no-commit或遇到了合并冲突。如果是后者,您还没有解决这些冲突。
  • 因此,您的工作树有准备提交的文件,但您实际上并没有提交。
  • 合并一旦提交,就有两个父提交。一个是提交,它您在进行合并提交之前所在的分支的尖端。由于您尚未进行合并提交,因此您当前的HEAD提交现在是该分支的尖端。因此,下面的短语“HEAD提交”表示“进行合并之前的分支尖端”。
  • 同时,我们还需要一个简短的单词或短语来表示来自待合并分支(将成为第二个父分支)的提交。我将其称为“入站”提交。(我在其他地方没有看到这个词,我只是在浏览了一些词库条目后才编出来的。)

根据您的评论回复,我相信您希望找到对提交有任何更改的文件HEAD,即那些从入站提交中获取任何更改的文件,无论 git 是否在没有发现冲突的情况下合并了这些文件。

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

git diff --cached --name-only

将列出它们。(这有点令人惊讶,因为git diff --cachedwithout--name-only不显示合并的文件。)

如果您只想要 git 已(或认为已)成功合并的文件:

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

将列出那些。(省略awk,并可选择使用-sor--short代替--porcelain, 以查看 的输出git status。在这种情况下,我们查找状态为“已合并,准备提交”的文件。具有合并冲突的文件将处于M状态。)

您可能还想将文件与其基于合并的版本进行比较。除了在多个合并库的(有些罕见的)情况下,这并不太难。不过,我会将这些细节排除在此答案之外。

于 2016-01-14T21:54:11.960 回答