GIT撤回引发的问题(reset和revert的使用)
在git使用的时候会,不小心commit了一个个人配置的文件,然后使用github desktop 的revert功能撤销了commit,然后发现版本回退了,提交的代码没有了,虽然代码没有了,在log还有对应的commit信息。然后我又在网上找了reset的用法,然后发现可以使用reset --hard SHA (SHA是commit的ID),我就尝试了回退,结果代码没有了,commit的记录在log也没有了。想回退都没了。
还好代码是工具生成的,重新生成了一份。在看资料时候发现可以使用rflog来找到以前代码。。
由于这个原因,回顾一下reset和revert的使用,免得以后还踩坑。
reset
除了在当前分支上操作,你还可以通过传入这些标记来修改你的缓存区或工作目录:
-
–soft – 缓存区和工作目录都不会被改变
-
–mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
-
–hard – 缓存区和工作目录都同步到你指定的提交
Revert
Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。
checkout 文件
Checkout一个文件和带文件路径git reset 非常像,除了它更改的是工作目录而不是缓存区。如果需要还原一个文件到以前的版本,可以使用 git checkout HEAD~2 xxx.java 这样的写法。
相比git reset,它不会改变现在的提交历史。因此,git revert 可以用在公共分支上,git reset 应该用在私有分支上。
你也可以把git revert 当作撤销已经提交的更改,而git reset HEAD 用来撤销没有提交的更改。
一个重要的区别是 reset会改变log,会删除指定的commit,而revert相当于把当前版本撤销回之前的版本,并且提交一个commit,log会多一个commit。
还有reset的参数也很重要 ,谨慎使用--hard参数,这样会更改所有的改动,包括工作目录
ref.
欢迎关注我公众号: