无法在git硬重置时丢失文件

时间:2012-04-05 07:43:05

标签: eclipse git

我在Eclipse中使用git。我创建了一个新文件,并对现有的版本化文件进行了更改。我承诺并尝试提取更改,但与现有的版本化文件发生冲突。我无法解决它,所以我最终在我提交之前硬重置。这解决了冲突,但也删除了我创建的新的无版本文件。有没有办法让这个文件回来?我认为硬重置不会影响未版本控制的文件。

1 个答案:

答案 0 :(得分:4)

git reset --hard不会影响未版本控制的文件,但是一旦您将新文件添加到索引并提交它就不再进行无版本化,因此重置为没有该文件的提交将丢失它。您可以通过重置为添加该文件的提交来恢复它。运行git reflog;你会得到这些方面的输出:

7d6d2bd HEAD@{0}: reset: moving to HEAD~1
4aaf64d HEAD@{1}: commit: new

HEAD@{1}是你的新承诺; HEAD@{0}重置为旧版本。再次重置,在重置之前提交丢失新文件(在我的示例中,它是HEAD@{1}):

$ git reset --hard HEAD@{1}

这会将存储库恢复到您提交之后的状态,然后重置,因此应该返回新文件。至于您最初尝试做什么,有几种方法可以重置而不会丢失您在最新提交中添加的新文件。最简单的方法可能是进行混合重置,然后结帐:

$ git reset HEAD~1
$ git checkout .

混合重置将使您的存储库保持原样 - 您将对旧文件进行未提交的更改,并且新文件将是无版本的。结帐会将您的更改还原为旧文件,但由于新文件现在是无版本的,因此它将不再使用