如何对比feat分支的纯变更并排除来自develop分支的合并提交?
提取feat分支的纯变更(排除develop合并内容)
1. 先找出你的所有变更提交
用这条命令列出feat分支上完全属于你、排除合并develop操作的提交:
git log --oneline --no-merges --cherry-pick --right-only a483b4b38...feat
--no-merges:跳过所有合并提交(包括你把develop合并到feat的那些)--cherry-pick --right-only:只保留feat分支独有的提交,自动剔除和develop重复的内容a483b4b38...feat:以你指定的起始提交为基准,对比feat和develop的分支差异
2. 汇总所有纯变更的Diff
如果要直接生成这些提交的完整变更内容,用下面的命令:
# 先拿到所有目标提交的哈希 COMMITS=$(git log --no-merges --cherry-pick --right-only a483b4b38...feat --pretty=format:"%H") # 生成这些提交相对于起始节点的汇总diff git diff a483b4b38..$COMMITS
嫌麻烦的话,直接用一行命令搞定:
git diff a483b4b38..$(git log --no-merges --cherry-pick --right-only a483b4b38...feat --pretty=format:"%H" | tr '\n' ' ')
3. 变基清理分支(可选)
如果后续还要继续维护这个feat分支,可以先把它变基到最新的develop上,这样你的所有提交会被重新堆叠在develop最新提交之上,此时直接对比起始节点和变基后的feat分支,就能得到干净的纯变更:
git checkout feat git rebase develop git diff a483b4b38 feat
⚠️ 注意:变基会修改分支历史,如果已经把feat分支推送到远程仓库,需要用git push --force更新,提前确认团队是否允许这么做。
内容的提问来源于stack exchange,提问作者Hao Wu
相关产品推荐
相关产品推荐

