1

我正在通过 Eclipse 使用 git。我创建了一个新文件,并对现有的版本化文件进行了更改。我提交并尝试拉取更改,但遇到了与现有版本化文件的冲突。我无法解决它,所以我终于硬重置到我提交之前。这解决了冲突,但也删除了我创建的新的未版本控制的文件。有没有办法找回那个文件?我不认为硬重置会影响未版本化的文件。

4

1 回答 1

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 .

混合重置将使存储库保持在您提交之前的状态——您将对旧文件进行未提交的更改,并且新文件将被取消版本化。结帐会将您对旧文件的更改还原,但由于新文件现在没有版本化,因此它将不理会它

于 2012-04-05T08:03:19.833 回答