为了账号安全,请及时绑定邮箱和手机立即绑定

在Git中,如何恢复提交之前已还原的暂存文件?

在Git中,如何恢复提交之前已还原的暂存文件?

Git
哈士奇WWW 2019-11-19 14:25:50
我试图使用Git Tower将更改引入我的存储库。当我这样做时,发生了冲突,并且我错误地进入了所有阶段(因为我想在解决冲突后进行提交)。当我这样做时,冲突将自己标记为已解决。我想手动解决更改,所以我点击了“中止合并”,但是,当我这样做时,它回滚了我所有的更改!有什么办法让他们回来吗?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

如果您有上演git的任何东西,您应该应该能够将其恢复。(如果您只是更改了工作副本,则将无法还原它。)


首先:你不运行git gc。在继续之前,请备份您的存储库和工作副本。(请确保备份.git目录。)也请避免在发生这种情况的情况下关闭终端和/或重新引导-如果所有操作均失败,则您有机会在历史记录/内存中查找内容。


无论如何,首先要尝试的是:


git fsck-丢失了

它将打印类似


检查对象目录:100%(256/256),已完成。

检查对象:100%(30165/30165),已完成。

悬空Blob 8f72c7d79f964b8279da93ca8c05bd685e892756

悬空提交4993502a6394491190d3f4d6fb3d1e14019c2e9b

由于您丢失了暂存文件并且没有进行提交,因此您对dangling blob条目感兴趣。


git show <sha>逐一运行-其中一些应该是您的文件。


查看完整回答
反对 回复 2019-11-19
?
MM们

TA贡献1886条经验 获得超2个赞

一个很晚的答案可以通过更快地找出应该恢复哪些斑点来简化恢复:


git fsck --full --no-reflogs --unreachable --lost-found | grep blob | cut -d\  -f3 | while read in; do printf "blob: $in\n"; git cat-file -p $in; printf "\n--------------------------------\n"; done > recover.txt

此命令将创建一个文件,其中包含可以恢复的每个Blob的哈希值以及该Blob的内容。


这样,您可以轻松搜索该文件并使用给定的哈希值恢复所需的Blob(使用命令git cat-file -p 8f72c7d79f964b8279da93ca8c05bd685e892756 > myFile.txt)


PS:如果您有很多无法访问的Blob,此文件可能会变得很大。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 1785 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信