如何排除已拒绝Pull Request代码,提交不含旧改动的新Pull Request
如何提交仅含新改动的Pull Request(排除已拒绝的旧改动)
我来帮你搞定这个问题,这种情况在开源贡献里挺常见的——核心思路就是把新改动和之前被拒的代码彻底切割开,基于上游项目的最新状态重新构建一个干净的分支来提交新PR。具体步骤如下:
1. 先同步你的fork与上游仓库
首先得确保你的本地代码和原项目(上游)完全对齐,消除之前被拒改动的痕迹:
- 如果还没添加上游仓库的远程地址,先执行这条命令(把
UPSTREAM_REPO_URL换成原项目的仓库地址):git remote add upstream UPSTREAM_REPO_URL - 拉取上游仓库的最新代码:
git fetch upstream - 切换到你的本地主分支(比如
main或master),合并上游的主分支代码:git checkout main git merge upstream/main
这一步完成后,你的本地主分支就和原项目的最新状态完全一致了。
2. 创建一个全新的干净分支
基于同步后的主分支,新建一个专门存放新改动的分支(比如命名为new-fix-improvement):
git checkout -b new-fix-improvement
这个分支现在是完全“干净”的,没有任何之前被拒绝的代码改动。
3. 把新迁移到干净分支里
分两种情况处理你的新改动:
- 如果新改动已经在旧分支里提交成了独立的commit:用
cherry-pick把这些commit单独挑到新分支(把<COMMIT_HASH>换成你新改动对应的commit哈希值,可通过git log在旧分支里查看):git cherry-pick <COMMIT_HASH1> <COMMIT_HASH2> - 如果新改动还没提交(只是本地修改):先在旧分支暂存改动,再切换到新分支恢复:
之后记得在新分支里提交改动:# 在旧分支执行暂存 git stash # 切换到新分支 git checkout new-fix-improvement # 恢复暂存的改动 git stash popgit add . git commit -m "你的新改动描述"
4. 推送新分支并提交PR
把这个干净的新分支推送到你的fork仓库:
git push origin new-fix-improvement
然后去代码托管平台(比如GitHub),基于这个new-fix-improvement分支创建Pull Request——这次的PR里就只会包含你的新改动,完全不会带上之前被拒绝的内容了。
额外小建议
以后开发新功能或修复时,尽量每次都基于上游的最新主分支创建新分支,别在之前被拒的分支上继续迭代,这样就能从根源避免旧改动混入新PR的问题。
内容的提问来源于stack exchange,提问作者JosephTLyons
相关产品推荐
相关产品推荐

