合并后钩子是否有办法获得由合并更改的所有文件的列表,即使它是快进的?
我认为那时候您最好的选择是重新引用。如果您只是快进,HEAD的reflog的第一行将如下所示:
63e21fb HEAD@{0}: merge origin/master: Fast-forward
因此,您应该只能打印第一行(git reflog -n 1
),检查它是否与merge .*: Fast-forward$
相匹配,如果匹配,请执行git diff HEAD@{1} HEAD
。 (您可能确实希望查看引用日志以验证是否存在快速合并,除非您可以从脚本中确信这是目前唯一的可能性。)
也可以使用ORIG_HEAD
和HEAD
shortcuts:
git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD
(另见:List all the files for a commit in Git)
[upd]
也许最好用HEAD@{1}
代替ORIG_HEAD
。
[如果使用git pull --ff-only
命令,则可以添加许多提交时,HEAD@{1}
(内部合并后钩子)将给出此命令之前的最后一次提交,而ORIG_HEAD
仅给出HEAD^
提交(至少在Git中2.1.4)。