git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用

首先我们先来了解一下这3个命令都有什么作用

git reset --hard xxx:
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

git reset --soft xxx:
重置当前的HEAD为指定commit,但保持暂存区和工作区不变

git revert xxx:
新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支

刚接触可能不太了解HEAD是什么,其实这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交。HEAD 并不是只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点。


git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用_第1张图片
git工作流程.png

使用git reflog命令来查看所有的版本信息
我们可以看到在是用来git reset --hard 3bc9551命令后,再次查看版本信息发现HEAD指向了3bc9551这个节点。但是要知道,暂存区和工作区同时也被重置了,所以可能造成数据的丢失。


git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用_第2张图片
1.png

同样的,在使用git reset --soft 3bc9551命令后,查看版本信息后发现HEAD同样指向了3bc9551这个节点。但是soft命令并没有改变暂存区和工作区,所以用commit进行提交的还是原来的暂存区和工作区的文件。
git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用_第3张图片
2.png

而git revert xxx命令则会对某次操作进行撤销,但是这次操作之前或者之后的commit都将被保留,并把这次撤销当做一次新的提交。

你可能感兴趣的:(git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用)