【发布时间】:2015-05-09 14:07:15
【问题描述】:
阅读Mark Dominus's article 和Scott Chanon's article 后,我认为git reset abcd --soft 不会影响索引,但是,以下显示它确实。
重置前
c1.txt、c2.txt、c3.txt 在 repo 中,c4.txt 在索引中。全部在工作目录中:
历史:
$ git log --oneline --decorate
b91d91b (HEAD, master) C3
231a5df C2
7e7b2d7 C1
索引:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: c4.txt
工作目录:
$ ls
c1.txt c2.txt c3.txt c4.txt
轻柔地重置为 C2 提交
$ git reset 231a --soft
$ git log --oneline --decorate
231a5df (HEAD, master) C2
7e7b2d7 C1
索引已更改
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: c3.txt
new file: c4.txt
$ ls
c1.txt c2.txt c3.txt c4.txt
我认为会发生的事情
从 Scott 的文章中,他说:
reset 要做的第一件事就是移动 HEAD 指向的东西……如果你添加标志 --soft,这是它唯一会做的事情。使用 --soft,reset 将简单地停在那里。
所以,我认为索引(我希望我已经理解为上面的git status 输出中显示的内容)不会改变,也就是说,它仍将包含c4.txt。上面的输出显示它实际上包含c3.txt 和c4.txt。
c3.txt 似乎已与c4.txt 一起移入索引中。
【问题讨论】:
-
“但是,以下显示它确实如此”——不,它没有,坦率地说,我很难理解你为什么认为它会这样。你能更详细地解释一下吗? (请记住,索引不变的事实意味着如果它等于旧提交树,并且旧提交树和新提交树不同,那么索引不能等于新提交树。 )
-
我假设这是我不明白的东西,我会补充一些问题。
-
你应该已经提供了所有的 git 命令以使其非常容易重现