您的位置:首页 > 其它

五、说说git reset命令

2013-10-29 15:25 615 查看
git reset命令加上--soft选项表示软撤销,表示不改动暂存区和工作目录中的内容,假如你执行了某次提交动作,但后来发现还有些文件没有提交,或者根本就不想执行本次提交动作,那就使用git reset --soft命令吧,例如:

$git reset --soft HEAD^

恢复到上次提交时的状态,但此时暂存区和工作目录中的内容并没有撤回,所以执行git diff命令之后是没有任何输出的,执行git diff --cached可得到输出结果。

有了--soft选项,自然就有--hard选项了,--hard表示硬撤销,例如:

$git reset --hard HEAD^

何谓硬撤销,和软撤销不同的是,就连暂存区和工作目录中的内容都回退到上次提交时状态,所以使用git reset --hard之后,git diff和git diff --cached都没有任何输出。

使用--hard命令有个好处是,当我们修改代码时,突然发现此次修改完全是无用的,想回退到修改之前的状态,命令如下:

$git reset --hard HEAD

但是使用git reset --hard命令时也需要注意的是,你好不容易修改好了代码还未提交,结果执行该命令之后所有的成果都灰飞烟灭了。。。

上面说了git reset --soft命令执行之后,暂存区的内容并没有回退,那如过想把暂存区的内容也回退呢?那就使用git reset --mixed命令吧,例如:

$git reset --mixed HEAD^

执行该命令之后,回退到上次commit时的状态,同时暂存区的内容也回退到上次commit时的状态,但工作目录的内容不会回退,此时,执行git diff命令会得到输出结果,但是git diff --cached无任何输出。

那如果git reset命令不加任何选项呢,那它有个默认选项为--mixed,所以执行git reset命令和git reset --mixed效果是一样的。

如果只想从暂存区中回退本次add,也有个命令,那就是git reset --,该命令后面还可以执行某个文件,例如:

$git reset -- main.c

那么上面命令执行之后,只是将暂存区中的main.c撤了回来,其它的文件并不会撤回来。

那上面HEAD以及HEAD^是什么意思呢?

HEAD表示最近一次的commit。

HEAD^表示HEAD的HEAD,即上上次的commit,关于HEAD大家有兴趣可以去看一下,其实就是最近一次提交的一个SHA-1值,所以在使用上面的命令时,可以直接跟上任意一次提交的SHA-1值,表示回退到那次的commit。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: