Git Reset:将处于Commit区的提交重置。
Git分为三个区:
工作区(Working Directory):没有修改、修改后未使用git add
的文件
暂存区(Staged):新增/修改后的文件调用git add
后都会被添加到暂存区
提交区(Commit):所有添加到暂存区里的文件通过git commit
之后会被统一添加到提交区,作为一次提交
HEAD指针指向的是最新的提交节点。而HEAD^代表的是前一次的提交节点。而HEAD~2代表的是前两次的提交节点。
git reset --soft HEAD^:将最近一次提交节点的提交记录回退到暂存区
git reset --mixed HEAD^:将最近一次提交节点的提交记录回退到工作区
git reset --hard HEAD^:将最近一次提交节点的提交记录全部清除
EP:
在Master分支中,首先通过git add test.txt
将test.txt文件添加到暂存区,再通过git commit -m "add file test.txt "
将暂存区的内容作为一次提交记录添加到提交区,最后如果没问题的话就可以通过git push origin master
将这次提交push到远端仓库。
使用
如果此时发现提交记录的comment写错了,如将git commit -m "add file test.txt"
写成了git commit -m "ad file test.txt"
,那么就可以使用:
git reset --soft HEAD^
将本次提交回退到暂存区,再重新把comment补全,进行一次提交。
如果此时发现提交记录里有一个文件多提交了,或者有一个文件漏添加到暂存区而没有在此次提交内,则可以通过git reset --mixed HEAD^
将本次提交都回退到没有添加到暂存区之前,然后再重新add需要提交的文件后,再重新add
如果此时发现修复一个BUG完全错了,希望取消这次提交,并且把代码回退到没有改动的话,则需要使用git reset --hard HEAD^
,来将这次提交全部回退。
暂存区回退操作
如果Test.txt文件已经被git add
添加到了暂存区中,想要将该文件回退到工作区(Working Directory)的话,则使用git reset HEAD Test.txt
,则将修改后的文件回退到了未被add的状态
工作区回退操作
如果Test.txt文件已经被改得乱七八糟了,想要把这个文件回退到最近一次更新的代码的话,则需要使用git checkout -- Test.txt
将该文件回到与HEAD的状态
所有文件回到HEAD指针位置
如果工程里面改的乱七八糟了,不仅仅只有一个Test.txt文件被修改,需要将工作区里面的所有文件恢复到HEAD指针的状态的话,则使用git reset --hard HEAD
即可