git reset --hard、git reset --sort及git revert区别

一、 在git操作中,有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。

1、二者区别:

git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;

2、具体用法如下:

使用git log命令查看本地的所有提交

git reset --hard、git reset --sort及git revert区别_第1张图片

最近一共进行了三次操作,分别是先创建了一个文件,wrote a file,然后修改加上我的名字后,再提交,操作说明add my name,第三次修改,加上我的年龄,提交说明add my age

git reset --hard、git reset --sort及git revert区别_第2张图片

使用命令git reset --hard head^(上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)

将我加上我的年龄的那一次修改撤销,执行git log指令,可以看到,add my age 的commit 已经被撤销,打开文件查看:

修改的内容也被撤销了。

使用命令git reset --soft head^后,在用git log查看,发现add my age的commit的操作也被撤销了,但是打开文件查看,

git reset --hard、git reset --sort及git revert区别_第3张图片

修改的内容还在,即--soft

保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可。

 

Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

 git revert HEAD~2 

相比git reset,它不会改变现在的提交历史。因此,git revert可以用在公共分支上,git reset应该用在私有分支上。

你也可以把git revert当作撤销已经提交的更改,而git reset HEAD用来撤销没有提交的更改。

 

from: https://zhuanlan.zhihu.com/p/32711219

你可能感兴趣的:(Git)