我不小心执行了git stash pop
两次让我隐藏在我想去的地方。如何撤消上一个流行音乐?我确实想要第一个pop而不是第二个pop,所以reset --hard HEAD
不会为我做这个。
答案 0 :(得分:9)
“撤消”git stash pop
有点痛苦,除非您在某处(例如,在屏幕上)列出了存储的原始提交ID。
git stash
documentation有方向(最后)用于恢复丢弃的藏匿处。这些是您想要的说明,因为pop
只是“apply
然后是drop
”。这意味着如果您恢复两个 stashes,则可以使用git reset --hard
恢复所有内容git stash pop
(或更安全,因为它不会“丢弃” - {{1} })你想要使用的那个藏匿,然后验证一切。
如果你能找到并恢复这两个藏匿处,那可能就是我的做法。
如果您只能找到第二个藏匿处(您想要“取消申请”的那个),您可以尝试反向应用它。
以下是文档中的“咒语”:
git stash apply
当您运行此操作时,您将获得一个代表每个"stash bag"的每个git fsck --unreachable |
grep commit | cut -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
提交的提交列表。让我们说它抛出这样的东西:
w
Checking object directories: 100% (256/256), done.
Checking objects: 100% (66/66), done.
commit 2783bc8cf98192acc3de647d6cbff2c1a2aecca5
Merge: 222c4dd 8466342
Author: ...
Date: Wed Feb 12 17:38:13 2014 -0700
WIP on branch: 222c4dd add clobber-reg example
commit e9fc3cc8e7864813b54bb1281c845297a16b1b47
Merge: 222c4dd d790e1f
Author: ...
Date: Wed Feb 12 17:28:00 2014 -0700
WIP on branch: 222c4dd add clobber-reg example
行在这里很有用,因为它是藏匿的时间。把这两个藏匿在一起很难,不是吗?将原始SHA-1 ID保存在某处,并在每个ID上运行date
。当你找到一个有价值的,给它一个名字:
git stash show -p
一旦你确定哪些是正确的恢复者,你就可以选择$ git tag recover-exp-1 e9fc3cc8e7864813b54bb1281c845297a16b1b47
$ git tag recover-exp-2 ...
然后git reset --hard
。您现在可以通过上面的标记名称进行申请:
git stash apply
当所有内容以您希望的方式保存和提交时,您可以删除各种“recover”标记。 (注意,你可以使用你喜欢的任何名字; $ git reset --hard # ouch, all gone now (maybe "git stash save" first)
$ git stash apply recover-exp-3 # that turned out to be the right one
没什么特别的,这就是我在这里制作的东西。)
答案 1 :(得分:1)
我不相信你可以轻易撤消上一次流行音乐。如果第一个pop中有你需要的东西,你可能只需要处理冲突。
将来如果你想避免这样的问题,你可以提交本地分支而不是使用存储。它更麻烦,但更有弹性。