reset 不仅有版本回退功能,还有清空暂存区的功能
1. 清空暂存区
修改文件README.md,并 git add .
添加到暂存区,执行 git status
命令如下:
git$ git add .git$ git statusOn branch masterChanges to be committed: (use "git reset HEAD..." to unstage) modified: README.md
git提示可以用 git reset HEAD <file>
来unstage暂存区,即清空暂存区,那就执行 git reset HEAD .
(HEAD 代表当前版本,HEAD^ 代表前一个版本,HEAD^^ 代表前两个版本,HEAD~10 代表前10个版本),再使用 git status
查看
git$ git statusOn branch masterChanges not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: README.mdno changes added to commit (use "git add" and/or "git commit -a")
README.md 文件又恢复到了修改状态,如果想要再撤销修改,使用 就好了
2. 版本回退
首先使用 git log --pretty=oneline
来查看版本库
git$ git log --pretty=oneline032dad1edf2b72f5053f2edd12560e16aad7c630 (HEAD -> master) log31dd61e8120e9a12bdbaebf5cfe2368dab8507b93 log29e596896bb4623a7c478717e67b22b0ef3aab2f3 log1
如果想回到 log1 时的版本,可以使用 git reset --hard HEAD~2
或者 git reset --hard 9e59689
,再使用git log --pretty=oneline
查看
git$ git log --pretty=oneline9e596896bb4623a7c478717e67b22b0ef3aab2f3 (HEAD -> master) log1
此时版本已经回到提交log1之后的状态,那如果想再回到log3的状态怎么办?可以使用 git reflog
来查看版本库
git$ git reflog 9e59689 (HEAD -> master) HEAD@{0}: reset: moving to 9e59689032dad1 HEAD@{1}: commit: log31dd61e8 HEAD@{2}: commit: log29e59689 (HEAD -> master) HEAD@{3}: commit: log1
可以看到log3的版本hash值,然后就可以再次使用 reset 回到 log3 了
git$ git reset --hard 032dad1HEAD is now at 032dad1 log3