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