本地单目录配置多fork远程仓库并推送至他人分支是否可行?
问题1:是否有比多目录更优的处理方案
有,你预期的单目录下配置多远程仓库的方案就是更优解,不需要维护多份重复的本地代码副本,切换不同仓库分支的成本更低,也不用手动同步多个目录的代码状态。
问题2:单目录多远程的使用方式是否可实现
完全可以实现,你操作后进入detached HEAD状态的原因是直接检出了远程分支的只读引用,没有创建对应的本地分支和该远程分支做绑定,完整可运行的操作流程如下:
前置配置(你已完成的步骤是正确的)
# 克隆自己的fork仓库到本地 git clone <自己的fork SSH地址> # 添加上游主仓库远程 git remote add upstream <主仓库SSH地址> # 添加队友的fork仓库远程 git remote add teammate <队友fork的SSH地址>
正确检出队友分支的操作
首先拉取队友远程仓库的所有分支更新:
git fetch teammate
然后通过以下任意一种方式创建本地跟踪分支即可避免detached HEAD:
方式1:检出时直接绑定远程分支
# 写法1 git checkout --track teammate/branchname # 写法2(Git 2.23+版本更推荐,语义更清晰) git switch --track teammate/branchname
执行后你会进入和teammate/branchname绑定的本地分支,此时提交的代码可以直接执行git push推送到队友的对应分支,不需要额外指定远程和分支名。
方式2:已经处于detached HEAD状态时的修复
如果你已经执行了git checkout teammate/branchname进入了 detached HEAD 状态,可以直接执行以下命令绑定生成本地分支:
# 基于当前 detached HEAD 状态生成本地分支 git checkout -b branchname # 将本地分支和队友的远程分支绑定 git branch --set-upstream-to=teammate/branchname
常用补充操作
- 查看所有已配置的远程仓库:
git remote -v - 拉取所有远程仓库的最新更新:
git fetch --all - 切换回自己的开发分支:
git checkout <你自己的分支名>
内容的提问来源于stack exchange,提问作者wordsforthewise
相关产品推荐
相关产品推荐

