Skip to content
难度LEVEL★★
阅读READ约 2 分钟~2 min
更新UPDATED2026-09

第 8 章 时光倒流 · 四种深度的撤销

easycode · Agent Skill

搞砸是日常,Git 的价值就在于每种深度的"砸"都有对应的退路。按错误走了多远,分四层。层数越深,动作越要慎重。

第一层,改了,还没 add。最常见也最无风险。git restore 文件名,或者干脆在 VS Code 源代码管理面板点那个"放弃更改"图标,改动瞬间蒸发,回到上次存档的样子。第二层,add 了,还没 commit。东西已在打包台,想拿下来,git restore --staged 文件名。这只是撤下打包台,改动本身还在工作区,可改可弃。第三层,commit 了,还没 push。箱子已封,但还没运出去。最简单也最推荐的姿势是不倒带,往前修,直接再改、再 commit 一次修正,历史里多一个"修正"存档,诚实又安全。进阶的"改写上一箱"手法叫 amend,规矩只有一条,没 push 的才许改写第四层,已经 push 了。箱子已进公共档案柜。唯一正路是 git revert 提交号,Git 自动生成一个反向存档,把那次改动原样抵消。历史上两箱都在,一来一回,清清楚楚。

为什么到了第四层就不能直接删掉那个 commit?那叫改写公共历史reset --hardforce push 干的就是这事,它们在第一册的红线卡上。云上的历史,别人(包括 AI,包括部署平台)都已经拿走对过账,你单方面篡改,所有人的账本就对不上了。听着耳熟吗?链上合约教过我们同一条道理,进了公共账本的东西,只能追加修正,不能抹掉重写。Git 在每天用小事故提醒我们这条大原则。

关键领悟

口诀一句,没推的可以整理,推了的只能追加。分不清在哪一层时,先 git status,再问 AI,别凭感觉敲。

试一试

playground 里把四层各制造一次、各撤销一次。重点体会第四层,revert 之后跑 git log --oneline,看历史如何"一来一回"。

由 Charles Tao 与 Claude 协作写成——这本身就是这套书讲的工作方式。Written by Charles Tao with Claude — which is itself the working method this series teaches. · 许可License