Repo 撤销当前修改

10 阅读2分钟

repo 提供了快速撤销所有仓库修改的命令,以下是几种常用方式:


一键撤销所有修改

方式一:最常用(推荐)

# 撤销所有仓库的所有修改(包括暂存区和工作区)
repo forall -c 'git reset --hard HEAD && git clean -fdx'
命令作用
repo forall对所有仓库执行命令
git reset --hard HEAD强制回退到最新提交,丢弃所有修改
git clean -fdx删除所有未跟踪的文件和目录

方式二:分步执行(更安全,可先检查)

# 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'

方式三:保留未跟踪文件(仅撤销修改)

# 只撤销跟踪文件的修改,保留新建的文件
repo forall -c 'git checkout -- .'

对比:不同清理强度

命令效果适用场景
git checkout -- .撤销跟踪文件的修改保留新文件,只恢复旧文件
git reset --hard HEAD回退到 HEAD,丢弃所有提交彻底回退到最新提交
git clean -fd删除未跟踪的文件/目录清理编译生成的文件
git clean -fdx删除未跟踪文件 + 忽略的文件最彻底清理(推荐)

-f = 强制,-d = 包含目录,-x = 包含 .gitignore 忽略的文件


常用组合命令

# 完整清理(最常用)
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 --hardclean -fdx 删除的文件无法找回
先备份如有重要修改,先 repo diff 导出补丁
子模块如需清理子模块,加 --recursive

导出修改(清理前备份)

# 导出所有修改到补丁文件
repo diff > my_changes.patch

# 之后可以重新应用
git apply my_changes.patch

总结:日常开发最常用的是:

repo forall -c 'git reset --hard HEAD && git clean -fdx'

一键回到干净状态,然后重新 repo sync