在git reset - hard之后获取数据

时间:2018-04-10 12:19:18

标签: git

我不小心做了:

git fetch && git reset --hard origin/mybranch 

关于生产,看起来我被破坏了。已进行了一些更改,但使用git addgit commit添加了更改。我怎么能收回我的数据?

我试过了:

git reflog
git reset HEAD@{1}

但我无法看到所做的更改。我怎么能让他们回来?

2 个答案:

答案 0 :(得分:1)

检查git status

如果您运行git reset HEAD@{1}(而不是git reset --hard HEAD@{1}),则磁盘上的文件将不会更改,并且仍会保留origin/mybranch的内容。
这些文件将在git status中显示为已修改。

如果是这种情况,请放弃这些更改:

git checkout .

答案 1 :(得分:1)

当您git add文件时,它会将该文件添加到对象数据库并将对象信息放在暂存区域中。运行git reset时,文件将从索引中删除,但从对象数据库中删除。因此,您可以检查对象数据库中是否存在“悬空”的对象。

例如:

如果我创建一个新文件并git add

% echo "new file" > newfile.txt
% git add newfile.txt
% git ls-files --stage
100644 40ee2647744341be918c15f1d0c5e85de4ddc5ed 0       file.txt
100644 3748764a2c3a132adff709b1a6cd75499c11b966 0       newfile.txt

然后我重置,注意newfile.txt从索引中消失:

% git reset --hard origin/mybranch
% git ls-files --stage
100644 40ee2647744341be918c15f1d0c5e85de4ddc5ed 0       file.txt

但是,该文件仍保留在对象数据库中,并且可以恢复。最简单的方法是在交互模式下download and install the git-recover program

% git recover -i
Recoverable orphaned git blobs:

3748764a2c3a132adff709b1a6cd75499c11b966  (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在对象数据库中查找已提交(或在索引中)的文件。您可以在the blog post announcing it中找到有关git-recover的更多信息。