git reset命令,非常牛的一个命令,这个命令可以让你时光穿梭回到过去。用在自己分支上很好用,但是千万不要在公共分支上使用。以免造成历史混乱,破坏历史可是重罪,别看那些穿越小说混的风生水起,那都是骗人的。
用git reset之前先要了解几个概念
HEAD
这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交,也就是本地仓库,即你的commit记录Index
index也被称为staging area,即add的记录Working Copy
working copy代表你正在工作的那个文件
操作实例
先执行git log查看当前的记录,这里是我预先做了几次commit
1 | commit fd9b11185a41cf5cfe187be61dc43c06dd7b5420 |
当前工作区是干净的,下面执行以下命令
–soft
1 | shooke@shooke-pc:/var/www/gittest$ git status |
我们发现使用git reset –soft后我们的commit少了一条,a.txt是已经add过的状态
也就是说–soft只是撤销了commit。但是a.txt的内容是没有改变的。我们用公式标示一下
HEAD
!=index
=Working Copy
只撤销了commit ,保留了index(add过)和工作区
–mixed
我们恢复到3条记录的状态,继续看下面的操作
1 | shooke@shooke-pc:/var/www/gittest$ git reset --mixed HEAD~1 |
我们发现git提示我们需要add,也就是说暂存区发生了修改,但是a.txt 的内容没有改变
我们再用公式标示一下
HEAD
=index
!=Working Copy
撤销了commit 、index,工作区不变
–hard
我们恢复到3条记录的状态,继续看下面的操作
1 | shooke@shooke-pc:/var/www/gittest$ git reset --hard HEAD~1 |
这一次没有a.txt有修改。也就是说工作区的文件与暂存去、本地仓库是一致的。打开a.txt发现里面的内容变成了2,也就是说a.txt内容也跟着回退到了上次commit时的代码。用公式表示
HEAD
=index
=Working Copy
commit 、index和工作区文件都回退改变