【问题标题】:List all modified files in git merge commit - even the fast forwarded列出 git merge commit 中所有修改过的文件——即使是快速转发的
【发布时间】:2026-01-02 02:05:02
【问题描述】:

我在想,当我将一个分支合并到另一个分支时,是否有一种方法可以在我的提交消息中列出所有更改的文件,而不仅仅是在两个分支中修改的文件。 通过查看合并提交,这将使我更好地了解分支中的更改。 有没有办法做到这一点?

【问题讨论】:

  • 我不认为对于快进提交你将能够做到这一点。

标签: git merge git-branch git-merge


【解决方案1】:

假设你有你的合并提交的 SHA,那么 git diff --name-only <SHA>^1 <SHA>

【讨论】:

    【解决方案2】:

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

    git log -m --name-only
    

    仅用于提交的文件名列表:

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

    由于合并有两个父级,因此存在一些空白,但可以轻松删除。

    【讨论】:

    • 这也只是列出了所有提交(当然包括文件名),但我只想有一个文件列表
    • 谢谢!我今天在任何地方都找不到 -m-1 记录(尽管它们仍然有效)。这些选项是否已重命名?
    • -1 在文档中为 -,您可以将日志限制为任意数量的提交。我似乎也可以找到-m 的文档,但它显示为示例之一。
    • -m 用于以下内容,并且是 diff 格式 选项:此标志使合并提交像常规提交一样显示完整的差异;对于每个合并父级,会生成一个单独的日志条目和差异。一个例外是,当给出 --first-parent 选项时,只显示与第一个父级的差异;在这种情况下,输出表示合并为当前分支带来的更改。
    • -m 位于git help log 的差异格式部分。不幸的是,它没有长选项名称。
    【解决方案3】:

    您还可以使用diff 命令查看任意两次提交之间的差异。如果分支尚未合并,您可以指定分支名称并比较它们,否则您可能需要找到它们分歧的位置 (like so) 合并前的最后一次提交在一起。

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

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

    【讨论】: