如何向GitHub基准仓库及多个复刻仓库提交PR贡献
解决GitHub向多个复刻仓库提交PR的瓶颈问题
方案1:本地多远程+分支隔离,完全不用临时复刻
这是最省心的方式,全程在本地管理所有提交:
- 先在本地初始化仓库(或者克隆任意一个上游仓库),然后把A、B、C、D都加为远程源:
git init git remote add A https://github.com/xxx/A.git git remote add B https://github.com/xxx/B.git git remote add C https://github.com/xxx/C.git git remote add D https://github.com/xxx/D.git - 给每个上游的PR创建单独的分支:
- 比如要给B提PR,先拉取B的最新代码:
git fetch B,然后基于B的主分支开新分支:git checkout -b pr-B B/main - 就在这个分支上写代码、提交,全程和其他分支隔离
- 比如要给B提PR,先拉取B的最新代码:
- 写完后把分支推到你自己的GitHub个人仓库(注意不是临时复刻),然后去B的仓库页面手动开PR:
- 点「New pull request」,在对比选项里,把head仓库选成你的个人仓库,分支选
pr-B,base仓库选B,分支选对应的主分支,直接提交PR就行
- 点「New pull request」,在对比选项里,把head仓库选成你的个人仓库,分支选
- 给C提PR时,重复上面的流程,开
pr-C分支,基于C的代码开发,推自己仓库后开PR,完全不受B的PR状态影响
这种方式彻底绕开了GitHub的复刻限制,所有提交都通过你自己的仓库分支来关联不同上游,没有任何冲突。
方案2:用仓库导入替代临时复刻
如果需要在GitHub上有远程分支跑CI或者协作,可以用导入功能绕过复刻限制:
- 要给B提PR时,别直接点复刻,去GitHub的「Import repository」页面,把B的仓库地址导入成你名下的新仓库(比如叫
my-B-pr) - 在这个导入的仓库里开分支、提交代码,然后给B提PR
- 要给C提PR时,直接再导入C成新仓库,和之前的
my-B-pr完全独立,不会有任何限制 - 等PR处理完,删掉这些导入的仓库就行
导入的仓库和原仓库没有复刻的关联关系,所以不会触发“复刻的复刻”的限制,也不会和其他临时仓库冲突。
方案3:用个人组织管理长期提交
如果经常要给多个上游贡献,建个个人组织更方便:
- 在组织下给每个上游建单独的仓库(比如
my-org/B-pr、my-org/C-pr),用导入或者手动关联远程的方式设置 - 每个仓库对应一个上游的PR开发,互相独立,管理起来更清晰
内容的提问来源于stack exchange,提问作者david.pfx
相关产品推荐
相关产品推荐

