问题

在一次分支切换中由于误操作将其他分支中的stash pop到了另一个分支,导致代码产生了非常多的冲突。还好当前分支改的不多直接dicard掉就好了,但是另一个的分支的stash就没有了,很多代码由于不想直接commit而stash下来,现在全部没了,心慌的不行,几天的工作都白干了。于是到网上搜索了一下有没有可以抢救的方法。

方案

git stash 中的代码由于误操作而在其他分支执行了git stash pop 或者 git stash clear后代码丢失,抢救的方法大致有两个:

  1. 网上搜索到的比较多的就是执行
git fsck --lost-found 

执行完之后会得到很多 id ,其中会标明哪些是 commit,另一个blob不太清楚是什么东西

Checking object directories: 100% (256/256), done.
Checking objects: 100% (64354/64354), done.
dangling blob eb0a5cabe0d2030dbe0d203be0d224a8b9d46ef5
dangling blob 8b9d46ef59260ea17892401cb22e54f4df56bf04
dangling blob 5e13c8974187cdf3d8b9d46ef58bcb7ed88ce967
dangling blob a1140825d9cd8b9d46ef5b8d4f8685383kkd66a5
dangling blob 841a404f69eba49fb48b5d5ef18b9d46ef586468
dangling blob 36222c728e3596e578b9d46ef546361b436ef7dd
dangling blob 492320b8281788ea908b9d46ef592e1adeb8cba9
dangling blob 81279c8f3fd9b95edae98b9d46ef55236880d679
dangling blob 0b2e7c8280893cd0f461d59b4e8b9d46ef5a0021
dangling blob 2c32a4721204375f08699df58b9d46ef5087ba56
dangling blob f934a008b42005ff416099ddf8b9d46ef5019195
dangling blob c938a8d3a8de78b9d46ef5a0c7b07c8ddfg431d3
dangling tree b43eb805a4f9e8b9d46ef5dc58ddf35be8dbd3d3
dangling blob ff3ec88e19a4a208b9d46ef5e2052375500ad7sd
dangling blob c03f7c6eea43833c98b9d46ef54f90fe6c49123f
dangling commit a3aed93558b9d46ef58e53a672c47625d19325
dangling blob 4e410cea8127c8b9d46ef57bcc3a9b3f410f74sg

然后输入git show id一个一个找,忽略dangling blob 的类型的记录,只找 dangling commit 的记录,找了前面一两个先别灰心,这个有人说是按时间排序,也有人说不是,我没有具体测试过

git show 4e410cea8127c8b9d46ef57bcc3a9b3f410f74sg

如果找到就使用 git merge id 恢复代码,反正我是没找到,没什么耐心了。

2. 突然想到之前有同事也遇到过类似的问题,Clion貌似可以找到一些历史记录,于是就去找了下,发现真的有,欣喜若狂啊!!!!

  • 首先右键自己的项目或某个文件夹,选择Local History -》 Show History

2a567eaf9c8c5e0d7ce6affe88f5806e.png
  • 然后就可以看到历史记录了

2f267d5f8e7db505edd271232d01e8c7.png
  • 选择对应的记录右键Revert就可以了,其他软件没有试过,大家可以去尝试一下有没有类似功能

OK,可以愉快的加班了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐