执行命令
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 来源
网友评论