You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Git与GitHub如何跳过master分支中的指定commit提交?

问题原因

你之前的操作逻辑存在误解:PR的作用是将源分支的增量改动合并到目标分支,而非用源分支的内容完全覆盖目标分支。已经存在于目标分支(master)上的#100系列提交,不会因为你新分支没有这些提交就被自动删除,所以之前的PR只会新增#101的改动,不会抵消#100的内容。

解决方案

根据你是否可以直接操作master分支,有两种可行方案:

方案1:先清理master的错误提交,再合入#101

适合允许直接修改master(或可以单独提回退PR)的场景:

  1. 拉取最新的master代码
git checkout master && git pull origin master
  1. 清理master上的#100系列提交,分两种情况:
    • 若#100系列提交还未被其他同事拉取,可直接硬回退到#99:
    git reset --hard 3f6231 # 3f6231为#99对应的提交ID
    git push -f origin master
    
    • 若#100系列提交已经公开被其他人拉取,用revert生成反向提交避免影响他人:
    git revert 3f6231..master # 范围指#99之后到当前master的所有提交,即全部#100系列
    git push origin master
    
  2. 此时master已经回到#99的状态,你之前创建的some_new_branch仅包含#101的改动,直接提PR合入即可,最终master的提交链为#99 -> #101,完全跳过#100系列。

方案2:仅通过一个PR完成全部改动

适合不允许直接修改master,所有变更必须走PR的场景:

  1. 基于最新master创建新分支
git checkout master && git pull origin master && git checkout -b some_new_branch
  1. 在新分支内先回退所有#100系列提交
git revert 3f6231..master
  1. 再cherry-pick #101的改动,解决可能的冲突
git cherry-pick 523c62 # 523c62为#101对应的提交ID
  1. 推送分支提PR即可
git push --set-upstream origin some_new_branch

这个PR会同时包含「回退#100系列的改动」和「#101的新增改动」,合并后即可实现跳过#100系列的效果。

注意事项

如果#100系列中包含合并提交,执行revert时需要加-m 1参数指定父分支,示例:git revert -m 1 合并提交ID。

内容的提问来源于stack exchange,提问作者nonopolarity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:18:03