美文网首页
git stash clear怎么找回stash内容

git stash clear怎么找回stash内容

作者: 轻丨尘 | 来源:发表于2020-09-01 15:40 被阅读0次

    执行命令

    git fsck --lost-found

    执行后得到如下commit记录

    dangling commit 940984b198fc32cc6738efe9299c1fe87a6c4872
    dangling commit 19187048cc271df1a3038a5366e44192c137156b
    dangling commit 7c2dfc02da13dd9123227af730eb2971399d4214
    dangling commit 563058be1aaf1cf4670026acd8422e71bf69037c
    dangling commit eb32a8eed165cef79785af77e03934d9dc679e90
    dangling commit 933f64347589c3853d6e4abb4e0d58d4d9e349ee
    dangling commit aa4c08cd64e34c273072d40be060e459cf077232
    

    得到的记录是无序的,且可能有几十上百条;
    "dangling commit ..."可以理解为你stash的commitId,有的不是dangling commit不用管;
    挨个执行下面命令,直到找到你需要的 commitId(暂时没找到更好的办法)

    git show “复制的commitId”

    记录中会描述stash日期和摘要,根据执行结果判断该commitId是不是你需要的
    找到你的id后执行下面命令(注意-m 后面的数字)

    git cherry-pick -m 1 "你的commitId"

    这样就还原了你git stash clear 的内容

    关于git cherry-pick -m后面的数字

    比如你的 commit history 是这样的:

    - A - B - E - F - master
        \        /
         C - D            fix
    显然,E 是一个 merge commit。如果你现在要在其他地方 git cherry-pick E,那么就会有歧义,因为 E 既可以是来自 master branch B - E 的改动 (diff),也可以是来自 fix branch D - E 的

    按照这个例子,fix 是被 merge 到 master 的。因此,你 git cherry-pick E -m 1 意思就是使用 B - E 的改动,如果是 git cherry-pick E -m 2 意思就是使用 D - E 的改动

    记住一点,1 是 “主干”,确切点儿说是被 merge 了代码的 branch,2 是 merge 来源

    相关文章

      网友评论

          本文标题:git stash clear怎么找回stash内容

          本文链接:https://www.haomeiwen.com/subject/fssvsktx.html