git stash clear怎么找回stash内容

执行命令

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内容)