Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
撤消意外git隐藏弹出_Git_Git Stash - Fatal编程技术网

撤消意外git隐藏弹出

撤消意外git隐藏弹出,git,git-stash,Git,Git Stash,在执行复杂的合并之前,我隐藏了一些本地更改,进行了合并,然后愚蠢地忘记了在运行git stash pop之前提交。pop产生了一些问题(大代码库中的错误方法调用),很难追踪。我运行了git stash show,所以我至少知道哪些文件被更改了。如果没有别的,我想这是一个教训,承诺更多 我的问题:是否可以在不撤消合并的情况下撤消隐藏弹出 试着用它来找到你藏起来的东西。我认为一个存储总是有两个提交,因为它保留了索引和工作副本(因此索引提交通常是空的)。然后git show查看差异,并使用patch-

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

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

试着用它来找到你藏起来的东西。我认为一个存储总是有两个提交,因为它保留了索引和工作副本(因此索引提交通常是空的)。然后
git show
查看差异,并使用
patch-R
取消应用它们。

来自
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

这比同一场景下的公认答案更能帮助我。

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

  • 使用“git stash”将所有更改(包括合并更改)移回stash
  • 再次运行合并并提交您的更改(不包括已删除的存储中的更改)
  • 运行一个“git stash pop”,它应该忽略以前合并的所有更改,因为文件现在是相同的
    之后,您只剩下过早删除的隐藏内容的更改。

    如果不先提交,则不允许您
    git stash pop
    。你是怎么做到的?不太确定(这是昨天)。合并未自行提交,因为存在冲突。在那之后,我不知何故能够运行隐藏流行音乐。我是在知道使用git版本1.7.9.msysgit.0时这样做的。我有未老化的文件,隐藏弹出窗口刚刚合并了所有内容。我可以在使用2.25.0.windows.1版本的Git2.25.0.0.1进行更改后运行
    git-stash-pop
    ,但我没有提交更改。如果您在提交之前对更改进行索引并在运行
    stash-pop/apply
    时丢失了更改,您可以发射git fsck--lost found。这个命令将遍历挂起的blob(对于那些不熟悉git术语的人来说是实际的文件),这些blob是暂存的,但没有提交到任何地方(因此挂起),并将它们放在.git/lost-find/目录下,在那里您可以
    git show
    它们,并查看这些文件是否就是您正在寻找的文件。哇,它们工作了。我能够用git fsck找到隐藏提交——无反射| awk'/dangling commit/{print$3}'(从链接中),我只是手动从这个差异中找到了问题。谢谢!fsck输出一个巨大的列表。把每一个SHA1都展示出来是很乏味的。你是怎么做到的?@meson10:不幸的是,藏品被保存在一个reflog中,这将是一个显而易见的方式(如果它们是一个真正的分支的话)来查看爆出藏品的历史。另外,让我建议,拒绝投票+请求帮助不是最好的策略。我花了一点时间才把它做好。这是我工作的结果:
    git diff-p${STACH_SHA1}~1${STASH_SHA1}}补丁-R-p1
    ;我按照建议尝试了
    gitshow
    ,但它的输出不适合补丁;此外,我还必须提供
    -p1
    选项进行修补,以便剥离
    git diff
    放在文件前面的
    a/.
    b/.
    元素,否则它将无法解析来自存储库根目录的路径。建议:在使用修补程序之前,要小心并在单独的分支中提交混乱。@BenJackson在您的回答中“总是”意味着
    stash pop
    stash push
    都将触发提交,从而保存对索引和工作目录的更改,对吗?请注意,许多解决方案都涉及搜索“WIP”依赖于默认的隐藏消息。如果您给您的存储明确的消息,它们可能不包含WIP。谢谢。我在log命令中添加了选项--oneline以提高可读性。这只会帮助您找到隐藏提交的SHA。但是如果与公认答案中的@basilikode注释(git diff SHA~1 SHA | patch-R)结合使用,则效果良好。我建议先使用path——干运行来检查。