如何准确获取Pull Request与目标分支最新Tag间的删除文件?
问题原因与解决办法
核心问题:git diff三点语法的行为不符合预期
你使用的git diff A...B三点语法,实际是对比A和B的共同祖先节点到B的所有变更,同时也会包含共同祖先到A的变更(如果A之后有新提交),这并非直接对比A和B两个提交的差异。而且如果本地仓库未同步远程最新代码,或PR分支的合并基础发生变化,就会导致多次运行结果不一致。
解决步骤
- 改用两点语法直接对比两个提交
两点语法git diff A..B会严格对比A提交与B提交之间的所有差异,完全匹配你查找从最新Tag到PR提交之间删除文件的需求,修改后的命令:GIT_DIFF_RESULT=$(git diff --diff-filter=D --name-only "$commitid_of_latest_tag".."$BITBUCKET_COMMIT") - 确保本地仓库同步远程最新状态
避免因本地分支落后远程导致的差异,执行diff前先拉取远程代码:git fetch origin - 自动获取目标分支的最新Tag提交ID
手动指定Tag可能出错,可通过以下命令自动获取目标分支上的最新Tag对应的提交ID(替换target-branch为你的实际目标分支名):commitid_of_latest_tag=$(git rev-parse $(git describe --abbrev=0 --tags origin/target-branch))
额外验证
若问题仍存在,可先查看两个提交之间的完整变更(不限于删除文件),确认差异范围是否正确:
git diff --name-status "$commitid_of_latest_tag".."$BITBUCKET_COMMIT"
内容的提问来源于stack exchange,提问作者CodeLover
相关产品推荐
相关产品推荐

