我在Windows中使用SmartGit。今天我需要将代码硬重置,回退到几个提交之前。SmartGit自动为我创建了一个修改文件的存储区。
重置后,它尝试应用该存储区:
$ git.exe stash apply --index stash@{0}
但它给了我以下内容:
Apply Stash: stash failed (return code 1)
我可以查看贮藏库的内容并查看我的所有代码,但是我无法应用这个贮藏库。如何解决这个问题?
git stash pop
命令,你就能在工作区获取已被存储的更改。(假设你想要的是stash@{0}
)git stash show -p > my_stash.patch
git apply --index
尝试保留你应用的储藏的已暂存与未暂存的设置。通常这会“太难”,但如果不使用 --index
,允许所有更改变为未暂存状态是可能的。如果不需要保持分离,那可能就“能用了”。
正如acanby 提出的建议,你可以将储藏转换为补丁(patch)。请注意,git stash show
只显示储藏的未暂存部分,因此这在某种程度上也像是不使用 --index
。
如果所有其他方法都失败了,您可以将保存的储藏转换为其自己的(新的)分支。这将恢复您重置的所有提交,但仅限于该新分支。实际上,1 git stash branch newbranch
所做的操作是:
git stash save
步骤时活动的提交(即当前的 HEAD
)(它的父提交是相同的老父提交,等等);newbranch
的提交指针设置为这个暂存区域的提交,该分支是新创建的;并且1这实际上更像是“事实”,而不是“本质”:这就是git stash branch
的工作原理,因为它保留了stash-bag中提交的i 并创建一个指向它的新分支名称。