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

时间:2016-01-13 17:19:07

标签: git automerge

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

Git在混合中通常以三种类型登记已更改的文件。新文件来了或旧文件被删除,自动合并和冲突。如果git在内部识别自动编辑的文件,所以我以为会有任何命令只列出自动合并文件。我希望在合并提交之前获取此列表。< / p>

1 个答案:

答案 0 :(得分:1)

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

  • 要执行合并,git必须找到&#34; merge base&#34 ;,它(非常松散地)是#34;当前分支和待合并分支共享开发历史记录的提交#34;
  • 您正在进行合并,并使用--no-commit或发生合并冲突。如果是后者,你还没有解决这些冲突。
  • 因此,您的工作树已准备好提交文件,但您实际上尚未进行提交。
  • 合并一旦提交,就会有两个父提交。一个是提交, 是您在进行合并提交之前所处的分支的提示。由于您尚未进行合并提交,因此您当前的HEAD提交是此分支的提示。所以短语&#34; HEAD提交&#34;下面表示&#34;在进行合并之前分支的尖端&#34;。
  • 同时,我们还需要一个简短的单词或短语来表示来自待合并分支的提交(它将成为第二个父级)。我会称之为&#34;入境&#34;承诺。 (我没有在其他地方看过这个术语,我只是在浏览了一些词库条目之后才编写它。)

根据您的评论回复,我相信您要查找从HEAD提交中任何更改的文件,即那些已从入站提交中获取任何更改的文件无论git是否合并了那些没有发现冲突的人。

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

git diff --cached --name-only

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

你是否只想要git已经(或认为已成功合并)的文件:

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

会列出那些。 (忽略awk,并可选择使用-s--short代替--porcelain,以查看git status的输出。在这种情况下,我们会查找文件其状态为&#34;已合并,准备提交&#34;。包含合并冲突的文件将处于M状态。)

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