无 squash 选项的快进合并后,如何用Git命令查看变更文件?
快进合并后获取变更文件的CI环境解决方案
情况1:CI脚本中执行合并操作
如果合并操作是在CI流程里执行的,最可靠的方式是提前记录合并前分支的提交哈希,合并后直接对比:
- 先记录合并前当前分支(比如master)的提交:
PRE_MERGE_SHA=$(git rev-parse HEAD) - 执行快进合并(加
--ff-only可确保仅执行快进合并,避免意外的非快进合并):git merge develop --ff-only - 对比合并前后的变更文件:
git diff --name-only $PRE_MERGE_SHA HEAD
情况2:已完成合并,CI环境无reflog支持
如果合并已经完成,且CI环境无法使用HEAD@{1}(无reflog),可以利用分支的共同祖先来获取合并前的状态:
- 执行以下命令直接输出所有变更文件:
原理:快进合并场景下,git diff --name-only $(git merge-base HEAD develop) HEADgit merge-base HEAD develop会返回master分支创建develop时的初始提交(即合并前master的最后一次提交),对比该提交与当前HEAD,就能得到develop分支上所有提交的变更文件。
注意:如果合并后develop分支已被删除,可尝试用远程分支作为合并前的基准(前提是合并后未推送到远程):
git diff --name-only $(git rev-parse origin/master) HEAD
内容的提问来源于stack exchange,提问作者Mickael Rahmine
相关产品推荐
相关产品推荐

