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
posted @ 2017-11-14 11:44  日含  阅读(307)  评论(0编辑  收藏  举报