正如@bentolo 所提到的,您可以手动删除它抱怨的文件,切换分支,然后手动将它们添加回来。但我个人更喜欢留在“git 内”。
最好的方法是将存储转换为分支。一旦它成为一个分支,您就可以使用您熟悉和喜爱的正常分支相关技术/工具在 git 中正常工作。这实际上是一种有用的通用技术,即使您没有列出的错误,也可以使用 stash。它运作良好,因为 stash 确实是在幕后提交(参见 PS)。
将存储转换为分支
以下内容在创建存储时基于 HEAD 创建一个分支,然后应用存储(它不提交)。
git stash branch STASHBRANCH
使用“stash 分支”
您接下来要做什么取决于存储与您的目标分支(我将称之为 ORIGINALBRANCH)现在所在的位置之间的关系。
选项 1 - 通常重新设置 stash 分支(自 stash 以来进行了大量更改)
如果您在 ORIGINALBRANCH 中进行了很多更改,那么您最好将 STASHBRANCH 视为任何本地分支。在 STASHBRANCH 中提交您的更改,将其重新设置在 ORIGINALBRANCH 上,然后切换到 ORIGINALBRANCH 并重新设置/合并 STASHBRANCH 对其的更改。如果存在冲突,则正常处理它们(这种方法的优点之一是您可以看到并解决冲突)。
选项 2 - 重置原始分支以匹配存储(存储后更改有限)
如果您只是在保留一些暂存更改的同时进行隐藏,然后提交,那么您要做的就是获得隐藏时未暂存的其他更改,您可以执行以下操作。它将切换回您的原始分支和索引,而无需更改您的工作副本。最终结果将是您在工作副本中的额外存储更改。
git symbolic-ref HEAD refs/heads/ORIGINALBRANCH
git reset
背景
Stashes 是提交,例如分支/标签(不是补丁)
PS,很容易将存储视为补丁(就像将提交视为补丁一样),但存储实际上是在创建时针对 HEAD 的提交。当您应用/弹出时,您正在做类似于将其挑选到当前分支中的事情。请记住,分支和标签实际上只是对提交的引用,因此在许多方面,存储、分支和标签只是指向提交(及其历史)的不同方式。
即使您没有更改工作目录,有时也需要
PPS,您可能在仅使用带有 --patch 和/或 --include-untracked 的 stash 后需要此技术。即使不更改工作目录,这些选项有时也会创建一个无法应用的存储库。我必须承认不完全理解为什么。有关一些讨论,请参阅http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html。