git reset 一直用的不太好,今天就把git reset深入学习一下。
git reset 字面意思为重置
经常用于将已经存放到暂存区,或者工作区的代码取出来,返回到工作区。
如果已经使用 git add . 将代码提交到了暂存区。这时候,我们可以使用git reset :
这提示将会把暂存区的数据,返回到工作区。
如果已经使用git commit -m “message” 将代码提交到了本地仓库。这时候,我们可以使用 git reset HEAD
git reset 有三个参数 soft | 默认的mixed | hard
默认的mixed参数:(特点:直接回退到工作区)
回退文件:
有的时候,我们通过git add . 将文件提交到了暂存区,但是我们有不想commit,想撤回。可以使用
git reset fileName将文件移回到工作区。
也可以不加任何参数,用git reset将整个暂存区的文件恢复到工作区。
$ git reset
Unstaged changes after reset:
M web.html
回退版本:
版本的标记
~和^都可以标记那个版本
一个^表示一个版本,可以多个,另外也可以使用 git reset HEAD~n这种形式。
重置到那个版本
git reset HEAD~1 意为将版本库回退1个版本,将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到未暂存阶段
即将已经存到本地仓库中的数据,撤销,然后放到工作区。
soft参数:(特点:将某个版本回退到暂存区)
git reset –soft HEAD~1 意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git reset --soft HEAD~1
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: web.html
modified: wucl.txt
hard参数:(特点:彻底的丢弃代码)
git reset –hard HEAD~1 意为将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本
就是将本地仓库中的代码,切换到上一个版本。当前版本删除,同时本地暂存区、工作区都回到上一版本。
如果使用git reset –hard HEAD,并没有
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git add .
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git commit -m "xxx"
[master aa11939] xxx
2 files changed, 2 insertions(+)
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git reset --hard HEAD^
HEAD is now at d105688 Merge pull request #1 in FZ/trygit from feature/zhaowei to master
Administrator@BiuBiu MINGW64 /e/code/trygit (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean