git reset用于将当前HEAD(版本库中该分支上的最新版本)复位到指定状态,可用于撤销之前的一些操作。
1、git reset --soft
我们先修改并commit一次,message为1,然后再修改一次,commit且message为2,git log一下得到以下画面
两次commit
复制message为1的哈希码,执行git reset --soft 5034b2656e6797a7f3dcfd137d487062a8dff699,并且git log之后
message为2的提交没有了
commit2已经没有了,但是commit2修改的代码还在,只是回到了add过但是未提交的状态
2、git reset --mix默认
重复刚刚的两次commit,这次执行git reset --mix 第一次哈希码,并git status -sb
红色M
依旧回到了commi2没有的状态,但是代码还在,只是没有add的状态
3、git reset --hard
依旧是这两次commit,执行git reset --hard 第一次哈希码,并git status -sb
没有修改的文件
commit2的代码已经没有了,文件完全回到commit1的状态
4、git revert
同样是两次commit,这次使用git revert HEAD,并且git status -sb后显示已经没有更改过的文件,commit2的代码也没有了,但是git log可以查看到revert的commit
没有改写历史
因此
git revert可以用在公共分支上,git reset应该用在私有分支上。也可以把git revert当作撤销已经提交的更改,git reset用来撤销没有提交的更改。









网友评论