■ space · 机器车间 · fig 1
■ 先说答案
三问 —— 推没推、留不留、共享不共享 —— 一条精确命令出口,无账号,全在浏览器里。
推上去了、别人又在拉这条分支? Revert 是唯一体面的撤销。
提交过、又丢了?reflog 营救 —— 被丢弃的 commit 约 90 天内仍可寻回。
18个状态在面板上
4条命令盖住这摊乱事
~90天里营救一直开着
01分类机,运转中
十八个状态在漏斗里排队 —— 按键 1 · 2 · 3 拨动拉杆,滚筒分出票单
FIG 1 · 撤销分类机按键 1 · 2 · 3 —— 或用按钮
去向 已推送 · 已路由 REVERT · 判词 唯一体面的撤销 · 重置 拒收
情形是「推到了共享分支」——只肯给一条命令:revert,因为其余选项会烧掉整支团队。
面板上 18 个状态 —— 三问,3 × 3 × 2 —— 大多数都坍缩进同一小把命令。
拒收门架横跨三条重置溜槽,螺栓锁死 —— 是永久结构,不是拉杆:已推送的 commit 进不去
02决策表
分类机的整副脑子,印出来了 —— 机器一格一格跑这张查询表,无账号,无上传
| 命令 | 历史 | 工作树 | 共享分支? |
|---|---|---|---|
git reset --soft HEAD~1 | 回移 1 | 改动保留,已暂存 | 否 —— 改写 |
git reset HEAD~1 | 回移 1 | 改动保留,未暂存 | 否 —— 改写 |
git reset --hard HEAD~1 | 回移 1 | 改动 被丢弃 | 否 —— 毁灭性 |
git revert HEAD | 追加一条撤销 commit | 未动分毫 | 是 —— 安全的走法 |
git reflog + git switch -c recovery <sha> | 颗粒无失 | 从 reflog 里找回 | 什么之后都能营救 |
共享分支这一问,就是整个工具。其余都是便利;这一问是损管。
03它打印的命令
四条命令几乎盖住所有乱摊子 —— 复制整块,警告注释一并奉上
# committed, not pushed, keep the changes staged
git reset --soft HEAD~1
# committed, not pushed, keep the changes unstaged
git reset HEAD~1
# pushed, others pull this branch — the only polite undo
git revert --no-edit HEAD~1..HEAD
git push
# committed and lost — reflog knows for ~90 days
git reflog
git switch -c recovery <sha-from-the-list>
验证:git reset --soft HEAD~1 → 改动保留,已暂存 · git reflog + git switch -c recovery <sha> → 颗粒无失,从 reflog 找回
区间—
HEAD~1..HEAD 恰好 revert 你点名的 commit —— 工具替你敲,但值得知道时钟—营救还有东西可救,全靠 git 把被丢弃的 commit 保持可寻回约 ~90 天
手机测试—一张静态页 —— 没服务器、没统计、没 cookie —— 在机房里也能加载,git 急救恰好就发生在机房
04机器拒收什么
拒收本身就是功能 —— 档案拒绝瞎猜的地方,分类机印出那堵墙
共享分支—「推到了共享分支」只肯给一条命令:revert —— 其余选项会烧掉整支团队
自家分支—重置各路只差 --force-with-lease 的尾巴 —— 工具仍然先递上体面的那条路
没有 rebase 帮助—要重排 commit?你懂的东西已经比工具教的多了
不做 stash 手术—那有它自己的一篇指南
回执—本站以「git reset last commit keep changes」排在位置 12.3 —— 27 次展示、一周零点击 —— 一个哭着要命令、不要长文的查询
出处: github.com/mrsaynothing/git-undo —— 朴素 HTML 和 JavaScript,没有构建步骤,没有依赖。fork 它,换皮肤,照意拆走我的措辞。
今年它只要帮你省下一次 reflog 观察,就赚回了它花掉的那个下午。
■ 诚实印记
实测环境:git 2.4x 命令集 · 仅浏览器 · 无账号,无上传 首次发布 2026-09-25。决策表是 revert 对 reset 的纪录熔成的查询表;每条命令按实测原样打印,警告一并附上。工具是一张朴素 HTML 和 JavaScript 的静态页 —— 它往任何地方发出去的东西是「无」。
生成器到此为止 · 没有任何 fetch · 全程本地