reset命令是一个挺重要的命令,毕竟基本上开发过程中无可避免的都会遇到版本回退的问题。
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
下面分析一下回退到指定版本是怎样的情况:(只探讨--soft的情况,--hard会把被回退的commit节点删掉,一般不用)
首先是master分支,在它基础上创建dev1分支:
git checkout -b dev1
然后在dev1分支上弄几个commit:
然后在dev1分支上创建dev2分支:
git checkout -b dev2
然后,执行回退命令:
git reset --soft 5e34e35
此时的dev2:
查看状态
git status
会发现git把被回退版本(在本例子中,被回退的版本为5e34e35之后的commit节点)的内容,弄到工作区中,也就是modified状态。
可以连续回退:
git reset --soft 54696ad
git会把被回退的版本内容继续弄到工作区中。
这时的dev2状态:
这时候执行:
git stash
然后不管你切换到dev1还是master分支,都可以看到这个stash的内容
git stash list
同理,不管你在master/dev1/dev2分支执行:
git stash clear
这个stash记录都会被删除。