【fwk基础】repo sync报错后如何快速修改更新
你这个问题是 repo sync 在同步时遇到本地改动(这些本地文件和远程分支上的文件不一致),导致 git checkout 被阻塞,从而 sync 失败。
从报错来看,有几类提示:
Please commit your changes or stash them before you switch branches.
这说明 这些项目的本地文件被修改,git 为了保护你的修改不被覆盖,所以拒绝切换分支或 checkout。
快速解决方法(丢弃本地改动,强制更新)
如果你不需要保留这些修改,可以让 repo sync 覆盖本地修改:
repo sync -c --force-sync --no-clone-bundle --no-tags
加上参数:
-c
:只同步当前分支(减少数据量)--force-sync
:强制把本地修改重置成远程内容--no-clone-bundle
:不使用 bundle,直接用 git fetch(更稳定)--no-tags
:不拉取 tag,提高速度
或者单纯要覆盖的话:
repo forall -c "git reset --hard; git clean -fd"
repo sync -c
这样会:
git reset --hard
重置所有被修改的文件git clean -fd
删除未追踪文件和目录
⚠ 注意:这种方法会丢失所有未提交的修改。
如果要保留修改
如果你是本地有改动需要保留,可用 stash 暂存后再同步:
repo forall -c "git stash"
repo sync -c
repo forall -c "git stash pop"
这样流程是:
- 在每个 repo 中
git stash
把修改存起来 - 执行同步
- 把 stash 的改动再取出来(如果冲突,需要手动解决)
推荐步骤
如果只是想快速丢弃本地改动然后重新同步:
repo forall -c "git reset --hard && git clean -fd"
repo sync -c --force-sync
如果想保留修改:
repo forall -c "git stash"
repo sync -c
repo forall -c "git stash pop"
✅ 总结
- 丢弃修改 →
git reset --hard && git clean -fd
- 保留修改 →
git stash
- 全量强制同步 →
repo sync -c --force-sync
我可以帮你写一个 一键修复脚本,让你每次只敲一个命令就能清理并同步。你要我帮你写吗?