我试图去拉一个变化成使用Git塔我的仓库。 当我这样做,有冲突,我误击阶段的所有(因为我想解决冲突之后提交)。 当我这样做,冲突标记本身解决。
我想手动解决的变化,所以我打“中止合并”,但是,我这样做的时候,它回滚我所有的变化! 有什么办法让他们回来?
我试图去拉一个变化成使用Git塔我的仓库。 当我这样做,有冲突,我误击阶段的所有(因为我想解决冲突之后提交)。 当我这样做,冲突标记本身解决。
我想手动解决的变化,所以我打“中止合并”,但是,我这样做的时候,它回滚我所有的变化! 有什么办法让他们回来?
如果你有什么上演的Git,你应该能够找回来。 (如果你只是改变了工作副本,你将无法恢复它。)
首先: 不要运行git gc
。 备份你的资料库和之前走在前面的工作副本。 (请务必备份.git
目录。)此外,还要避免闭合端子哪里发生这种情况,和/或重启-如果所有的失败,你有机会找到历史/记忆的东西。
总之,尝试的第一件事是:
git fsck --lost-found
它会打印出类似这样
Checking object directories: 100% (256/256), done. Checking objects: 100% (30165/30165), done. dangling blob 8f72c7d79f964b8279da93ca8c05bd685e892756 dangling commit 4993502a6394491190d3f4d6fb3d1e14019c2e9b
因为你失去了筹备的文件并没有做一个承诺,你有兴趣在dangling blob
条目。
运行git show <sha>
为每一个-他们中的一些应该是你的文件。
要在亚历山大的回答扩大与一个简单的选择:是的,如果你已经上演了更改,那么你也许可以让你的文件备份。 当你运行git add
,文件实际上是添加到Git的对象数据库。 在你做的那一刻,git会放在文件中的指标:
% git add bar.txt
% git ls-files --stage
100644 ce013625030ba8dba906f756967f9e9ca394464a 0 bar.txt
100644 6af0abcdfc7822d5f87315af1bb3367484ee3c0c 0 foo.txt
请注意,跳回到bar.txt的条目包含的文件的对象ID。 Git的文件实际上已经加入到它的对象数据库。 在这种情况下,已GIT中它添加到存储库作为松散对象:
% ls -Flas .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
4 -r--r--r-- 1 ethomson staff 21 14 Jun 23:58 .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
这些文件最终会被垃圾收集(确实如此,并没有明确运行git gc
)。 值得庆幸的是,默认情况下,这将在几个月 ,而不是几天的事情发生。 直到这些文件被垃圾回收,就可以恢复它们。
要做到这一点,最简单的方法是下载并安装git-recover
计划在交互模式:
% git recover -i
Recoverable orphaned git blobs:
61c2562a7b851b69596f0bcad1d8f54c400be977 (Thu 15 Jun 2017 12:20:22 CEST)
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
> tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
> veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
> commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
Recover this file? [y,n,v,f,q,?]:
git-recover
容貌对于未提交(或指数)在对象数据库文件。 你可以找到更多关于git-recover
在博客文章宣布它 。