列出 git 合并提交中所有修改过的文件,即使是快进合并。

60

我在思考是否有一种方法,当我将一个分支合并到另一个分支时,能够列出所有更改的文件而不仅仅是在两个分支中都修改的文件。这将使我通过查看合并提交来更好地了解分支中发生了什么变化。是否有一种方法可以实现这一点?


我认为对于快速提交,你不可能做到那样。 - Roman
3个回答

92

我不知道如何在提交消息中做到这一点。但合并之后,这将列出所有受合并提交影响的文件的名称:

git log -m --name-only

仅列出提交的文件名清单:

git log -m -1 --name-only --pretty="format:" <Merge SHA>

由于合并有两个父节点,所以存在一些空白区域,但这可以很容易地去除。


3
谢谢!今天我找不到任何有关-m-1的文档(尽管它们仍然有效)。这些选项已经更名了吗? - Johann
4
在文档中,"-1" 被写作 "-<数字>",你可以将日志限制在任意数量的提交记录内。不过,我似乎找不到 "-m" 的文档说明,但它在示例中被展示了出来。 - Schleis
12
"-m"是一种用于 diff格式化 的选项:该标志使合并提交像常规提交一样显示完整的差异。对于每个合并父级,都会生成单独的日志条目和差异。当使用"--first-parent"选项时,只有针对第一个父级的差异才会显示;在这种情况下,输出表示合并引入到当前分支的更改。 - d48
3
"-m" 出现在 git help log 的“差异格式化”章节中。不幸的是,它没有长选项名称。 - Elijah Lynn
@elijah: 或者 git log help - Timo
显示剩余4条评论

16

您也可以使用diff命令查看任意两个提交之间的差异。如果分支尚未合并,您可以指定分支名称进行比较,否则您可能需要找到它们分歧的地方例如这样以及在它们被合并回一起之前的最后一个提交。

git diff --name-status <commit> <commit>

-name-status 只显示已更改文件的名称和状态。


5
假设您有合并提交的SHA,那么运行以下命令可以列出与父节点不同的文件列表: git diff --name-only <SHA>^1 <SHA>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接