撤消意外的git stash pop

时间:2011-07-01 04:15:28

标签: git git-stash

我在执行复杂的合并之前隐藏了一些本地更改,进行了合并,然后在运行git stash pop之前愚蠢地忘记了提交。流行音乐创建了一些问题(在大代码库中调用错误的方法),这些问题很难被追踪。我跑了git stash show,所以我至少知道哪些文件被更改了。如果没有别的,我想这是一个提供更多的教训。

我的问题:是否可以在不撤消合并的情况下撤消隐藏弹出窗口?

3 个答案:

答案 0 :(得分:64)

尝试使用How to recover a dropped stash in Git?查找您弹出的藏匿处。我认为存储总是有两个提交,因为它保留了索引和工作副本(所以索引提交通常都是空的)。然后git show他们看到差异并使用patch -R取消申请。

答案 1 :(得分:33)

来自git stash --help

Recovering stashes that were cleared/dropped erroneously
   If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
   following incantation to get a list of stashes that are still in your repository, but not reachable any more:

       git fsck --unreachable |
       grep commit | cut -d\  -f3 |
       xargs git log --merges --no-walk --grep=WIP

这比同样情景下的接受答案更能帮助我。

答案 2 :(得分:0)

如果您的合并不太复杂,另一个选择是:

  1. 使用“git stash”
  2. 将所有更改(包括合并更改)移回存储
  3. 再次运行合并并提交更改(不会从已删除的存储中进行更改)
  4. 运行“git stash pop”,它应忽略之前合并的所有更改,因为文件现在完全相同。
  5. 之后,只剩下您过早丢弃的藏品所带来的更改。