gpt4 book ai didi

git - 不小心运行了 git stash pop 两次

转载 作者:IT王子 更新时间:2023-10-29 01:02:11 28 4
gpt4 key购买 nike

我不小心执行了两次 git stash pop,让我落后了我想去的地方。我如何撤消最后一次 pop ?我确实想要第一个 pop 而不是第二个,所以 reset --hard HEAD 不会为我做这件事。

最佳答案

“撤消”git stash pop 有点痛苦,除非您在某处(例如,在您的屏幕上)列出了您的存储的原始提交 ID。

git stash documentation有恢复丢失的藏品的指示(在最后)。这些是您想要的说明,因为 pop 只是“apply 然后 drop”。这意味着如果您恢复两个 存储,您可以使用 git reset --hard 来恢复所有内容,git stash pop(或者——更安全,因为它不会“删除”—git stash apply) 您想要使用的一个存储,然后验证所有内容。

如果您能找到并恢复这两个藏品,我可能会这样做。

如果您只能找到第二个存储(您想要“取消应用”的那个),您可以尝试反向应用它。

这是文档中的“咒语”:

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

当你运行它时,你会得到一个提交列表,代表每个 "stash bag" 的每个 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

date 行在这里很有用,因为它是存储的时间。很难区分这两个藏品,不是吗?将原始 SHA-1 ID 保存在某处,并对每个 ID 运行 git stash show -p。当你找到一个有值(value)的东西时,给它起一个名字:

$ git tag recover-exp-1 e9fc3cc8e7864813b54bb1281c845297a16b1b47
$ git tag recover-exp-2 ...

一旦你确定哪些是正确的恢复的,你就可以开始做 git reset --hard 然后 git 存储应用。您现在可以通过上面制作的标签名称申请:

$ 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

当所有内容都按照您希望的方式保存和提交后,您可以删除各种“恢复”标签。 (请注意,您可以使用任何您喜欢的名称;recover-exp- 没有什么特别的,那只是我在这里编造的。)

关于git - 不小心运行了 git stash pop 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com