git stash pop后文件未被暂存

3

我对使用git跟踪的代码进行了一些更改。这些更改已经被暂存(添加)。然后我使用 git stash 将它们藏起来了。之后,我使用 git stash pop 将它们取出来。此时,这些更改不再是暂存状态。这是预期的行为吗?如果是,git文档中有描述吗?


我个人更喜欢使用 git stash apply 而不是 pop,因为这样如果出现问题,我可以再次尝试。 - evolutionxbox
从 https://git-scm.com/docs/git-stash 看来,pop 似乎只是将更改应用于工作树。 - evolutionxbox
我看到了貌似不一致的行为 - 从所有更改被暂存开始,然后被藏起来,然后(切换分支,做一些操作,再切换回来),然后弹出 - 一些文件(新添加的文件)被暂存,而其他文件(被删除或修改的文件)却没有被暂存。 - user9645
1个回答

5
你可以告诉Git尝试还原索引状态。
git stash pop --index

乍一看,这似乎很令人困惑,甚至可能看起来像是一个bug,因为这不是默认的行为;特别是如果你足够仔细地观察过,已经知道内部存储了stash创建时暂存区和工作树中内容的知识。但这正是所记录的内容(请参见pop下的git stash文档)。
然而问题在于,如果应用stash时出现冲突,则需要索引进行冲突解决...因此--index操作必须失败。所以,无论好坏, 默认行为都是执行一个更加确定会成功的操作(即使它需要将您留在“解决冲突”状态)。

非常有帮助。但是,我没有看到你提到的git stash文档。也许你是在引用其他地方的文档? - Woodchuck
git stash的文档中,在pop下面 - "从存储列表中删除单个存储状态并将其应用于当前工作树状态的顶部" ... "如果使用--index选项,则尝试恢复的不仅是工作树的更改,还包括索引的更改。" - Mark Adelsberger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接