意外地跑了两次git stash pop

时间:2014-02-18 04:07:02

标签: git

我不小心执行了git stash pop两次让我隐藏在我想去的地方。如何撤消上一个流行音乐?我确实想要第一个pop而不是第二个pop,所以reset --hard HEAD不会为我做这个。

2 个答案:

答案 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中有你需要的东西,你可能只需要处理冲突。

将来如果你想避免这样的问题,你可以提交本地分支而不是使用存储。它更麻烦,但更有弹性。