【发布时间】:2013-04-11 11:25:35
【问题描述】:
我一直在阅读the examplesstash 命令如何缓解生活,并遇到了这段代码 sn-p:
# ... 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 commit):
HEAD
master
my_wip
|
-------------3
/
/
--1 ------------ 2
但正如我从文档中得知的那样,它会这样做(因为在取消存储后,我们应该到达我们决定存储时的位置):
master
|
-------------3
/
/
--1 ------------ 2
|
my_wip
HEAD
这是否意味着HEAD^ 是当前分支的前一个位置,因此它取决于所选的分支(我一直认为HEAD^ 只是HEAD 的前一个位置,无论当前分支如何) ?还是我误解了什么?
【问题讨论】:
-
我看到问题中有一个错误:
reset应该使用HEAD移动分支指针。我会马上编辑它。但这并不影响我对HEAD^指向哪里的问题。