repo 提供了快速撤销所有仓库修改的命令,以下是几种常用方式:
一键撤销所有修改
方式一:最常用(推荐)
bash
# 撤销所有仓库的所有修改(包括暂存区和工作区)
repo forall -c 'git reset --hard HEAD && git clean -fdx'
| 命令 | 作用 |
|---|---|
repo forall |
对所有仓库执行命令 |
git reset --hard HEAD |
强制回退到最新提交,丢弃所有修改 |
git clean -fdx |
删除所有未跟踪的文件和目录 |
方式二:分步执行(更安全,可先检查)
bash
# 1. 先查看哪些仓库有修改
repo status
# 2. 只撤销特定仓库(示例:frameworks/base)
repo forall frameworks/base -c 'git reset --hard HEAD'
# 3. 撤销所有仓库
repo forall -c 'git reset --hard HEAD'
repo forall -c 'git clean -fdx'
方式三:保留未跟踪文件(仅撤销修改)
bash
# 只撤销跟踪文件的修改,保留新建的文件
repo forall -c 'git checkout -- .'
对比:不同清理强度
| 命令 | 效果 | 适用场景 |
|---|---|---|
git checkout -- . |
撤销跟踪文件的修改 | 保留新文件,只恢复旧文件 |
git reset --hard HEAD |
回退到 HEAD,丢弃所有提交 | 彻底回退到最新提交 |
git clean -fd |
删除未跟踪的文件/目录 | 清理编译生成的文件 |
git clean -fdx |
删除未跟踪文件 + 忽略的文件 | 最彻底清理(推荐) |
-f= 强制,-d= 包含目录,-x= 包含.gitignore忽略的文件
常用组合命令
bash
# 完整清理(最常用)
repo forall -c 'git reset --hard HEAD && git clean -fdx'
# 简写形式
repo forall -c 'git reset --hard && git clean -fdx'
# 清理后重新同步
repo forall -c 'git reset --hard HEAD && git clean -fdx' && repo sync -c
注意事项
| ⚠️ 警告 | 说明 |
|---|---|
| 不可恢复 | reset --hard 和 clean -fdx 删除的文件无法找回 |
| 先备份 | 如有重要修改,先 repo diff 导出补丁 |
| 子模块 | 如需清理子模块,加 --recursive |
导出修改(清理前备份)
bash
# 导出所有修改到补丁文件
repo diff > my_changes.patch
# 之后可以重新应用
git apply my_changes.patch
总结:日常开发最常用的是:
bash
repo forall -c 'git reset --hard HEAD && git clean -fdx'
一键回到干净状态,然后重新 repo sync。