7

有没有办法让合并后挂钩获取合并更改的所有文件的列表,即使它是快进的?

4

2 回答 2

13

列出已更改文件的正确 Git 命令是diff-tree

也可以使用ORIG_HEADHEAD 快捷方式:

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

(另请参阅:列出 Git 中提交的所有文件

[更新]

HEAD@{1}用. 代替可能会更好ORIG_HEAD。IE:

git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD

git pull --ff-only命令的情况下,当可以添加许多提交时,HEAD@{1}(在 post-merge 挂钩内)给出该命令之前的最后一次提交,而ORIG_HEAD只给出HEAD^提交(至少在 Git 2.1.4 中)。

于 2013-09-23T11:15:16.457 回答
3

我认为那时你最好的选择是 reflogs。如果您只是快进,HEAD 的 reflog 的第一行将如下所示:

63e21fb HEAD@{0}: merge origin/master: Fast-forward

所以你应该能够只打印第一行 ( git reflog -n 1),检查它是否匹配merge .*: Fast-forward$,如果是,就执行git diff HEAD@{1} HEAD。(您确实希望查看 reflog 以验证是否存在快进合并,除非您可以从脚本中确信这是现在唯一的可能性。)

于 2011-02-02T18:31:28.727 回答