我不小心做了:
git fetch && git reset --hard origin/mybranch
关于生产,看起来我被破坏了。已进行了一些更改,但使用git add
和git commit
添加了更改。我怎么能收回我的数据?
我试过了:
git reflog
git reset HEAD@{1}
但我无法看到所做的更改。我怎么能让他们回来?
答案 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
的更多信息。