首先我们先来了解一下这3个命令都有什么作用
git reset --hard xxx:
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --soft xxx:
重置当前的HEAD为指定commit,但保持暂存区和工作区不变
git revert xxx:
新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
刚接触可能不太了解HEAD是什么,其实这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交。HEAD 并不是只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点。
git工作流程.png
使用git reflog命令来查看所有的版本信息
我们可以看到在是用来git reset --hard 3bc9551命令后,再次查看版本信息发现HEAD指向了3bc9551这个节点。但是要知道,暂存区和工作区同时也被重置了,所以可能造成数据的丢失。
1.png
同样的,在使用git reset --soft 3bc9551命令后,查看版本信息后发现HEAD同样指向了3bc9551这个节点。但是soft命令并没有改变暂存区和工作区,所以用commit进行提交的还是原来的暂存区和工作区的文件。
2.png
而git revert xxx命令则会对某次操作进行撤销,但是这次操作之前或者之后的commit都将被保留,并把这次撤销当做一次新的提交。
网友评论