在Git中,我怎么能恢复被前提交恢复上演文件?在Git中,我怎么能恢复被前提交恢复上演文件?(In

2019-06-02 12:34发布

我试图去拉一个变化成使用Git塔我的仓库。 当我这样做,有冲突,我误击阶段的所有(因为我想解决冲突之后提交)。 当我这样做,冲突标记本身解决。

我想手动解决的变化,所以我打“中止合并”,但是,我这样做的时候,它回滚我所有的变化! 有什么办法让他们回来?

Answer 1:

如果你有什么上演的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>为每一个-他们中的一些应该是你的文件。



Answer 2:

要在亚历山大的回答扩大与一个简单的选择:是的,如果你已经上演了更改,那么你也许可以让你的文件备份。 当你运行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在博客文章宣布它 。



文章来源: In Git, how can I recover a staged file that was reverted prior to committing?
标签: git git-tower