Skip to content

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

搞砸是日常,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 协作写成——这本身就是这套书讲的工作方式。 · 许可