代码之家  ›  专栏  ›  技术社区  ›  Oleg Pavliv

主分支上的Git Diff树为空

git
  •  0
  • Oleg Pavliv  · 技术社区  · 8 年前

    当我跑步时

    git diff-tree --no-commit-id --name-only -r HEAD
    

    在分支上,它返回上次提交时修改的文件名。

    但是当我在主分支上运行相同的命令时,它什么也不返回。

    阅读

    git help diff-tree
    

    没有阐明这种行为。它表示该命令比较一个或多个树。如果只指定了一个,那么它会将其与其父级进行比较。

    在master上:

    $ git diff-tree --name-only -r HEAD
    $ git diff-tree --name-only -r HEAD HEAD^
    path/to/modified-file
    $
    

    为什么在主服务器上运行这个命令什么也不返回?

    1 回复  |  直到 8 年前
        1
  •  1
  •   torek    8 年前

    如果当前提交是 合并提交 (有两个或两个以上的父母),那么:

    git diff-tree --name-only -r HEAD
    

    手段:

    git diff-tree --name-only -r HEAD HEAD^1 HEAD^2
    

    (添加更多 HEAD^ number 如果是章鱼合并,或者使用特殊的 ^@ 一次命名所有父代的符号;上面主要是为了说明)。

    因为它比较多棵树,所以它使用 组合差分 (或与 --stdin ,默认情况下完全不生成diff)。AS the documentation says :

    注意 组合差分 仅列出以下文件: 从所有父级修改

    (强调我的)。如果子(合并)提交的 path/to/modified-file 与父级1中的文件不同,但与父级2中的文件匹配,您将看不到文件名。

    注意, -m 标志将 分裂 合并到多个虚拟提交中,每个提交都有一个父级,然后列出与该父级的差异。将此与 --no-commit-id 但是,这意味着更难判断哪些父级对合并提交有哪些更改(尽管如果某个文件列了两次,而合并提交只有两个父级,则可以立即判断它是从两个父级更改的)。