如何基于同主仓库的他人Fork分支在自有Fork创建新分支?
问题
我有一个使用已久的Fork仓库:udance4ever/batocera.linux,希望基于另一位开发者Fork仓库的bryanforbes/macos-build分支,在自己的Fork中创建名为“Apple-build”的分支。两个Fork都源自同一主仓库batocera-linux/batocera.linux。我知道可以创建“Fork的Fork”,但后续合并变更回原自有Fork会有麻烦(近期不会向主分支提交合并),也欢迎其他可行工作流方案。
已尝试的操作
参考某个Stack Overflow方案执行了以下命令:
git fetch https://github.com/bryanforbes/batocera.linux.git bryanforbes/macos-build
该命令成功拉取数据,输出如下:
remote: Enumerating objects: 48, done. remote: Counting objects: 100% (47/47), done. remote: Compressing objects: 100% (21/21), done. remote: Total 48 (delta 24), reused 41 (delta 22), pack-reused 1 (from 1) Unpacking objects: 100% (48/48), 26.15 KiB | 704.00 KiB/s, done. From https://github.com/bryanforbes/batocera.linux * branch bryanforbes/macos-build -> FETCH_HEAD Fetching submodule buildroot From https://github.com/batocera-linux/buildroot ce59a3e8ce..015766e5a6 br2-external -> origin/br2-external From https://github.com/batocera-linux/buildroot * branch c5e38d806a062cd40ccc5c0f000370d9f3c65879 -> FETCH_HEAD
但执行以下命令时出错:
git merge --allow-unrelated-histories bryanforbes/macos-build
错误信息:
merge: bryanforbes/macos-build - not something we can merge
同时无法切换到该分支:
$ git checkout bryanforbes/macos-build error: pathspec 'bryanforbes/macos-build' did not match any file(s) known to git
我希望将该分支导入自有仓库,以便合并提交到集成分支开展后续工作。
解决方案
方法一:直接从FETCH_HEAD创建本地分支
你用git fetch拉取的分支只会存到临时的FETCH_HEAD里,没有在本地创建对应的分支引用,所以没法直接用分支名操作。可以直接基于拉取的内容创建你的目标分支:
# 基于FETCH_HEAD创建本地Apple-build分支 git checkout -b Apple-build FETCH_HEAD # 将本地分支推送到自己的Fork仓库 git push origin Apple-build
方法二:添加远程仓库并拉取分支
如果后续还需要同步该开发者的分支更新,建议先添加他的仓库作为远程源:
# 添加远程源,命名为bryanforbes(可自定义) git remote add bryanforbes https://github.com/bryanforbes/batocera.linux.git # 拉取他的macos-build分支到本地 git fetch bryanforbes bryanforbes/macos-build # 创建本地Apple-build分支并关联该远程分支 git checkout -b Apple-build bryanforbes/bryanforbes/macos-build # 推送到自己的Fork git push origin Apple-build
后续如果他的分支有更新,直接执行git fetch bryanforbes,再合并到你的Apple-build分支即可。
替代工作流建议
如果不想处理复杂的远程分支同步,也可以:
- 直接在GitHub网页上操作:打开bryanforbes的仓库,切换到macos-build分支,点击「Fork」创建自己的二次Fork,然后在这个二次Fork里创建Apple-build分支,后续可以通过PR把变更合并回原Fork。不过这种方式确实会多一个仓库,适合偶尔同步的场景。
- 或者将bryanforbes的分支作为补丁导入:用
git format-patch生成补丁文件,再在自己的仓库里应用,适合仅需要一次性获取变更的情况。
内容的提问来源于stack exchange,提问作者udance4ever
相关产品推荐
相关产品推荐

