如何识别feature分支合并develop时的有效变更差异?
识别两次评审间的有效合并变更
要找出feature/foo在第一次评审后新增的、与合并相关的有效变更(排除develop分支本身的更新),可以通过以下Git命令实现:
前提准备
先确定第一次评审完成时feature/foo的最后提交哈希,记为REVIEWED_COMMIT。你可以通过git log feature/foo查看提交历史,或从PR/MR的历史记录、评论区找到这个节点,也可以给它打个标签方便后续使用:
git tag reviewed-1 <REVIEWED_COMMIT_HASH>
方法一:直接对比变更集(排除develop分支内容)
- 获取两次合并的基础节点:
# 第一次评审时,feature/foo与develop的共同祖先 BASE_OLD=$(git merge-base reviewed-1 develop) # 当前feature/foo与develop的共同祖先 BASE_NEW=$(git merge-base feature/foo develop) - 提取并对比有效变更:
执行后输出的内容,就是两次评审之间# 获取develop分支在两次合并基础间的所有变更文件 DEVELOP_CHANGES=$(git diff --name-only $BASE_OLD $BASE_NEW) # 对比feature/foo从评审完成到当前的变更,排除develop分支的变更内容 git diff reviewed-1 feature/foo -- $(git diff --name-only reviewed-1 feature/foo | grep -vFxf <(echo "$DEVELOP_CHANGES"))feature/foo上新增的、不属于develop分支的有效变更。
方法二:通过临时分支Rebase对比
这种方式更直观,模拟第一次评审内容同步到当前develop后的状态,再与当前feature/foo对比:
- 创建临时分支并Rebase到当前
develop:# 基于第一次评审的提交创建临时分支 git checkout -b temp-reviewed reviewed-1 # 将临时分支Rebase到当前develop,同步develop的最新更新 git rebase develop - 对比临时分支与当前
feature/foo:
这里的差异就是git diff temp-reviewed feature/foofeature/foo在第一次评审后新增的有效变更(Rebase会自动整合develop的更新,所以对比结果不会包含develop本身的内容)。 - 清理临时分支:
git checkout feature/foo git branch -D temp-reviewed
内容的提问来源于stack exchange,提问作者user5534993
相关产品推荐
相关产品推荐

