藏在 git

stuck with stash in git

我正在使用 git,但还有很多东西要学。我想保存对文件的一些更改(但不提交)并转到另一个分支,查看那里的一些代码,然后返回我正在处理的内容。就这样。所以我做了

> git stash
> git checkout
> vi ....
> git stash apply stash@{0}

发现自己面临一条错误消息

Auto-merging schematic.f
CONFLICT (content): Merge conflict in schematic.f

我显然没有意识到 stash apply 是如何工作的。现在我卡住了。我想不出的任何事情都无法让我离开我当前的分支并回到我正在工作的那个分支。我不断收到同样的错误消息。我该如何摆脱这个?谢谢

幸运的是,apply 意味着 在我当前的工作树中尝试存储,但保留存储 因此存储本身是完整的。1 并且,根据您的命令序列(假设 vi ... 只是查看某些内容,而不是更改它),您的 stash 然后 checkout 应该离开了您当前提交的干净工作树,因此您所要做的就是强制工作树与当前提交匹配,其中:

git reset --hard HEAD

(请注意,git reset --hard 会清除对工作树所做的任何更改,因此请确保那里的所有更改都只是 git stash apply 所做的更改:您可能需要检查 git statusgit diff 首先,例如,只是为了双重和三重确定)。

一旦工作树再次干净,您可以git checkout做的分支想要更改,git stash apply隐藏,如果一切顺利,git stash drop吧。


1出于这个原因,我总是推荐 git stash apply 而不是 git stash pop,尽管事实上,pop 只会在干净利落,所以区别很小。