Git储藏失败

3

我在Windows中使用SmartGit。今天我需要将代码硬重置,回退到几个提交之前。SmartGit自动为我创建了一个修改文件的存储区。

重置后,它尝试应用该存储区:

$ git.exe stash apply --index stash@{0}

但它给了我以下内容:
Apply Stash: stash failed (return code 1)

我可以查看贮藏库的内容并查看我的所有代码,但是我无法应用这个贮藏库。如何解决这个问题?

3个回答

6
只需执行git stash pop命令,你就能在工作区获取已被存储的更改。(假设你想要的是stash@{0}

4
你能将它导出为补丁,然后尝试手动应用吗?
git stash show -p > my_stash.patch

我会尝试一下。stash和patch的格式是一样的吗? - Jake Wilson
不会,但 -p 选项会输出一个类似补丁的格式。请注意,这个补丁不会包含你已经在工作目录中的更改。 - acanby

4
有几件事情可以做:
  1. git apply --index 尝试保留你应用的储藏的已暂存与未暂存的设置。通常这会“太难”,但如果不使用 --index,允许所有更改变为未暂存状态是可能的。如果不需要保持分离,那可能就“能用了”。

  2. 正如acanby 提出的建议,你可以将储藏转换为补丁(patch)。请注意,git stash show 只显示储藏的未暂存部分,因此这在某种程度上也像是不使用 --index

  3. 如果所有其他方法都失败了,您可以将保存的储藏转换为其自己的(新的)分支。这将恢复您重置的所有提交,但仅限于该新分支。实际上,1 git stash branch newbranch 所做的操作是:

    • 将储藏中保存的暂存区域转换为一个普通提交
    • 它的父提交是在执行 git stash save 步骤时活动的提交(即当前的 HEAD)(它的父提交是相同的老父提交,等等);
    • 将分支 newbranch 的提交指针设置为这个暂存区域的提交,该分支是新创建的;并且
    • 使工作区和(如果保存在储藏中)所有未跟踪文件准备好在您现在所在的新分支上进行提交。

1这实际上更像是“事实”,而不是“本质”:这就是git stash branch的工作原理,因为它保留了stash-bag中提交的i 并创建一个指向它的新分支名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接