我一直在阅读命令如何简化生活的示例stash
,并遇到了以下代码片段:
# ... hack hack hack ...
$ git checkout -b my_wip
$ git commit -a -m "WIP"
$ git checkout master
$ edit emergency fix
$ git commit -a -m "Fix in a hurry"
$ git checkout my_wip
$ git reset --soft HEAD^
# ... continue hacking ...
据我所知,这里发生的情况如下:
我们在当前提交处创建一个新分支:
--1
|
master
my_wip
HEAD
然后我们暂存修改过的文件并对my_wip
分支进行新的提交:
--1 ------------ 2
| |
master my_wip
HEAD
然后我们结帐master
:
--1 ------------ 2
| |
master my_wip
HEAD
然后我们修改一些文件并进行新的提交(带有初步暂存(-a
标志)):
HEAD
master
|
-------------3
/
/
--1 ------------ 2
|
my_wip
然后我们结帐my_wip
:
master
|
-------------3
/
/
--1 ------------ 2
|
my_wip
HEAD
然后我们做git reset --soft HEAD^
。
在这个命令之后,我希望 git 移动HEAD
到它之前的位置,即3
提交。所以我希望它能让我们进入这个阶段(工作目录和暂存区来自2
提交):
HEAD
master
my_wip
|
-------------3
/
/
--1 ------------ 2
但正如我从文档中得到的那样,它会这样做(因为在取消存储后,我们应该到达我们决定存储时所处的位置):
master
|
-------------3
/
/
--1 ------------ 2
|
my_wip
HEAD
这是否意味着这HEAD^
是当前分支的先前位置,因此它取决于所选分支(我一直认为这HEAD^
只是HEAD
当前分支的先前位置)?还是我误解了什么?