vagabond 2015-12-01
在使用git时, 很多时候编辑之后,想反悔,想回滚到之前的改动。
那么checkout 和 reset 都可以回滚。但是有区别
git reset a.txt 将会把 index 中缓存的 对a.txt 的修改,给剔除掉。但是工作目录中的 a.txt 却没动。
最终效果就是 变成了 a.txt 没有被 add 一样。
git checkout a.txt 将会从 index 中将 a.txt 覆盖到 工作目录中的 a.txt。如此,如果a.txt 修改过,但是没有被 add ,那么 执行这语句,将会把 a.txt 的改动给丢弃。如果已经 add 了 a.txt 到 index ,那么执行这个语句就没任何变化, 因为add之后, 工作目录和 index 里是一样的。
单独执行 git reset 的话,意思将是 ‘undo add’ ,就是把刚才add到 index 的改动,丢弃。但是工作目录不会有变化。
现在说说 git checkout HEAD~2 a.txt 会是什么样子,这句命令,将会将 index 和 工作目录中的 a.txt 都修改为 HEAD之前第2个版本,并且无需add ,因为 index 和工作目录都变了,是一样的。你执行执行 commit 提交即可。