6.撤销操作

小白的故事

本故事纯属虚构,如有雷同,^0^那可太巧了

”大神!你是再叫我吗“,老鸟回过头问小白。
“是啊大神,虽然git diff很牛,可以让我知道改过什么,但我一点点的改回去好麻烦啊,有没有别的办法?”

大神,老鸟暗喜。这个大神的称号还是很少用的。老鸟摆出一副高深莫测的表情。
“办法当然有,既然你问了,就告诉你吧”

老鸟回到小白的工位入座。拿过键盘,开始实战时光回退大法,输入 git checkout package.json。施展至于本着经验精神不忘问一句,“你确定这些修改不要了?”
“恩恩,前面的思路有问题,我想到了一个更好的办法,所以还原吧。”小白虚心的说道。
只见老鸟手起指落,敲击在回车上。

再次查看文件,package.json文件真的恢复了。小白满眼崇拜的目光看向老鸟。
看到小白的表情,老鸟还是非常受用的。

“既然你这么好学,老夫就再教你一招,包你从此不会写错代码。”老鸟说道
“恩恩,大神请将”小白谦虚道。

“这个git呢要活学活用,你已经知道git分为工作区,暂存区和仓库了吧?”老鸟说道
“恩恩”小白道

“git diff的功能你也了解了吧”,老鸟继续说
“恩恩”小白点头道

“其实工作区,暂存区和仓库的概念是贯彻始终的,git checkout 也适用”,老鸟继续说
“大神的意思是说,如果我对package.json进行了 git add操作,checkout的时候就会回到add时候的代码,如果没有add过,就会回到上一次commit时候的代码?”。小白问道

“恩,不错悟性很好啊,记住一点,开发一个功能要常add,完成后在用commit收尾。这样在开发过程中出错,可以及时撤销,也可以减少不必要的commit历史”。老鸟提醒小白。
“恩恩,谢谢大神”,小白真诚的向老鸟道谢

一口一个大神,叫的老鸟飘飘然。老鸟也是非常的开心。临走不忘说一句“遇到问题尽管找我”

小结

git checkout --filename 可以撤销文件的变更。

  • 如果文件git add过,会撤回到add时的代码,即暂存区代码。
  • 如果没有git add过,会撤回到上次commit时的代码,也就是版本库中,最近的版本。

关于工作区和版本库的介绍,可以看上一篇《4.工作区和版本库》

如果一个功能比较复杂,可以完成一小部分执行一次add,或者是commit,这样在后续开发中发现改错了东西,可以及时撤回。