应用使用 --all 创建的 git 存储

Applying a git stash created with --all

我不小心用 --all 选项创建了一个 git 存储,根据文档,

If the --all option is used instead then the ignored files are stashed and cleaned in addition to the untracked files.

所以现在用 git stash pop 恢复我的更改失败了:

some/ignored/file already exists, no checkout
Could not restore untracked files from stash

(我实际上应该做的是使用--include-untracked

git stash show -p 仍然列出我的更改,没有任何忽略的文件。我如何 apply 我的藏品而不 git 试图恢复被忽略的文件?

编辑:我刚刚创建了一个测试存储库并做了一个git stash --all。忽略的文件被隐藏并从文件系统中删除。我的问题是,在我上面的例子中,它们被隐藏了,但是 没有 从文件系统中删除,所以这似乎是问题的原因。

您应该删除这些文件以弹出存储。您可以手动完成,也可以按照以下方法进行:

git stash -all  # make a new stash           
git stash pop stash@{1}  # apply your original stash

如果你喜欢它,你可以放下你所做的新藏品:

git stash drop

使用日志查找您的存储的提交哈希

$ git log --graph --all --decorate --oneline

一切都很重要,因为它还显示藏品

看起来应该与此类似

*-.   cd5e9ae (refs/stash) WIP on master: cd48088 Fixed GET chats output
|\ \  
| | * e48d0d7 untracked files on master: cd48088 Fixed GET chats output
| * 1a3bf97 index on master: cd48088 Fixed GET chats output
|/  
* cd48088 (HEAD, origin/master, master) Fixed GET chats output

现在,你想检查存储的顶部(这里是 cd5e9ae)

$ git checkout cd5e9ae

您将处于分离的 HEAD 状态
向后重置它,保留更改

$ git reset HEAD~1

然后按照您的意愿收藏它

$ git stash --include-untracked

现在您可以回到 master 或您工作的任何地方并应用新的正确存储

$ git checkout master
$ git stash pop

灵感来自 this blog post

我刚刚对其进行了测试,它在我的项目中使用了我忽略的文件,它应该也适用于你。