Repo 撤销当前修改

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。

相关推荐
普通人62 小时前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
是main不是漫4 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
好的佩奇14 小时前
Dart 之集合元素
android·flutter·dart
小七在进步14 小时前
string的使用(1)
c++·visual studio
Easyhood15 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青15 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
FlightYe16 小时前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
疯华整猫17 小时前
删掉 LeakCanary 那天,我用 Trae 自己撸了一套:最难的不是分析堆,是决定什么时候 dump
android·人工智能·性能优化
kloc18 小时前
聊天室项目入口网关子服务的实现
linux·c++