为什么repo sync未检出manifest文件中指定的分支?
问题根因
Repo工具的默认设计行为就是如此:manifest中default标签的revision属性仅用于指定各个项目需要同步到的远端提交/分支指针,默认不会主动为每个项目创建对应的本地跟踪分支,只会将HEAD直接指向匹配revision的提交,也就是你观察到的游离(detached HEAD)状态。
你在git branch -a中看不到本地master分支,是因为Repo默认不会自动基于远端的remotes/repo1/master生成本地分支,只有显式执行创建操作后本地分支才会存在。
你使用repo init -b master无效的原因是:repo init的-b参数仅用于指定manifest仓库自身的检出分支,和各个子项目的本地分支配置无关。
解决方案
- 如果需要为所有项目一次性创建并切换到对应manifest指定分支的本地跟踪分支,在
repo sync完成后执行:
repo start master --all
该命令会遍历manifest中所有的project,基于对应远端分支自动创建名为master的本地分支并完成检出,操作完成后进入任意子项目执行git status都会显示处于master分支。
- 后续执行同步时,增加
--rebase参数即可保持在本地分支更新,不会回到游离状态:
repo sync --rebase
内容的提问来源于stack exchange,提问作者bgoodr
相关产品推荐
相关产品推荐

