我在本地主分支上进行了几处更改。这些本地更改尚未被暂存(添加)。
为了更新主分支,我执行了以下操作:
- 将我的本地更改存储。
- git pull
- git stash apply
我发现,在此之后,本地更改被暂存(添加)了?
它们不应该像之前一样保持未暂存状态吗?
我在本地主分支上进行了几处更改。这些本地更改尚未被暂存(添加)。
为了更新主分支,我执行了以下操作:
我发现,在此之后,本地更改被暂存(添加)了?
它们不应该像之前一样保持未暂存状态吗?
git stash
基本上与git commit
相同。它创建了一个完整的提交,但不将其添加到历史记录中。相反,它将提交添加到暂存区。
因此,git stash
必须做出选择:要么提交(储藏)所有未提交的更改,要么只提交(储藏)已添加到索引的更改。它不能两者兼备。那样需要进行两次提交而不是一次。
据我所知,git stash
获取所有未提交的更改。
git stash apply
只是为了帮助你暂存更改。如果你不想将它们暂存,可以将其取消暂存。 - functionpointergit stash pop
的条目中提到了--index
选项,并解释说:如果使用--index选项,则尝试恢复的不仅是工作树的更改,还包括索引的更改。但是,当存在冲突时(这些冲突存储在索引中,因此您无法像最初那样应用更改),这可能会失败。
在我看来,这意味着除非指定了--index
,否则存储的更改仅应用于工作树,而不涉及索引。 - kostixgit stash
实际上确实会产生两个(有时是三个)提交。当git stash
完成后,refs/stash
是一个具有两个或三个父级的提交。 "主"提交refs/stash
本身包含工作树状态,而refs/stash^2
包含保存的索引状态。第三个提交refs/stash^3
仅在您使用了-u
或-a
并且包含未跟踪的文件(以及使用-a
时被忽略)。 (git rev-parse refs/stash^
== git rev-parse HEAD
。) - torekgit stash list
随时查看所有已储藏的内容。您还可以在主内容进行更改后(例如pull命令后)稍后添加您的储藏内容。建议您遵循Git的原始文档,以便更加清晰明了。这里是http://git-scm.com/book/en/Git-Tools-Stashing。