在合并后的钩子中,是否有一种方法可以获取所有被更改的文件列表,即使它是快进式合并?
列出修改文件的正确 Git 命令是 diff-tree
此外,也可以使用 ORIG_HEAD
和 HEAD
快捷方式:
git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD
(另请参见:列出Git提交中的所有文件)
[更新]
也许使用 HEAD@{1}
代替 ORIG_HEAD
会更好。 即:
git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD
在使用git pull --ff-only
命令时,如果有许多提交可以添加,那么HEAD@{1}
(在合并后钩子中)将给出此命令之前的最后一个提交,而ORIG_HEAD
只给出HEAD^
提交(至少在Git 2.1.4中是如此)。
我认为你在这种情况下最好的选择是参考日志。如果你只是快进了,HEAD的参考日志的第一行将如下所示:
63e21fb HEAD@{0}: merge origin/master: Fast-forward
因此,你应该能够仅打印第一行 (git reflog -n 1
),检查它是否与 merge .*: Fast-forward$
匹配,如果匹配,则执行 git diff HEAD@{1} HEAD
。(你可能需要查看 reflogs 来验证是否存在快进合并,除非你可以从脚本中确信现在它是唯一的可能性。)
git diff --name-only HEAD@{1} HEAD
呢? - Mark Longair@{}
符号的用法。 - mckeedgit show <merge commit>
获得更完整的差异输出,但是你是对的,如果你只看变更文件列表,那就无所谓了。 - Cascabel