如何在git中恢复文件历史记录

时间:2014-06-06 04:37:54

标签: eclipse git history

在我工作的Eclipse Kepler 4.3.2副本中安装Android工具之后,我被迫删除Eclipse并重新安装它时出了点问题。我的工作区受到了损害,甚至我的git存储库都被损坏了。

我有一些文件,我过去三周每天至少犯过一次,然后又恢复到第一个版本。这只是灾难的一个例子,其他文件也有损坏的历史,这个具体情况如下所示

git log -p --follow PartyEvaluationModels/Resources/Rules/Person.d2wmodel

commit d48d3c9b7dbb8769278a70f1400947d87e7f0d6d
Author: Ângelo Andrade Cirino <>
Date:   Tue May 13 15:11:20 2014 -0300

    Tentativa de implementação com ERPartials e adição de arquivos de regras
    para todas as entidades até agora definidas.

diff --git a/PartyEvaluation/Resources/d2w.d2wmodel b/PartyEvaluationModels/Resources/Rules/Person.d2wmodel
similarity index 100%
copy from PartyEvaluation/Resources/d2w.d2wmodel
copy to PartyEvaluationModels/Resources/Rules/Person.d2wmodel

commit 4d51eb3fa72fee750ba4b0a7e8c53216a9ea0b25
Author: Ângelo Andrade Cirino <>
Date:   Thu May 8 23:17:01 2014 -0300

    Funcionalidades para omitir atributos de entidades e abas de telas de
    edição de entidades foram implementados com sucesso.

diff --git a/PartyEvaluation/Resources/d2w.d2wmodel b/PartyEvaluation/Resources/d2w.d2wmodel
index b6b1df4..7793fda 100644
--- a/PartyEvaluation/Resources/d2w.d2wmodel
+++ b/PartyEvaluation/Resources/d2w.d2wmodel
@@ -1,4 +1,4 @@
 {
-    rules = (
-    );
-}
+  "rules" = (
+  ); 
+}
\ No newline at end of file

commit df14fc9d4dc2f811307b704f85d59b8cc8b0b9a7
Author: Ângelo Andrade Cirino <>
Date:   Sun Mar 30 23:44:27 2014 -0300

    Inserção do projeto Party

diff --git a/PartyEvaluation/Resources/d2w.d2wmodel b/PartyEvaluation/Resources/d2w.d2wmodel
new file mode 100644
index 0000000..b6b1df4
--- /dev/null
+++ b/PartyEvaluation/Resources/d2w.d2wmodel
@@ -0,0 +1,4 @@
+{
+    rules = (
+    );
+}

正如我所说的,这个文件几乎每天都会被提交,现在它的所有历史记录都在本地和GitHub上丢失了。由于我的本地副本和GitHub失去了它的历史,我想我在几个文件上失去了三个星期的工作。

如果有人帮我找到解决方案,我将非常感激。

2 个答案:

答案 0 :(得分:0)

我很好奇GitHub的历史也失去了;除非你使用push --force,否则不可能。你有可能在另一个分支上完成所有这些工作吗?

假设没有......

git reflog会向您展示旧的&#34;化身&#34; HEAD;它记得在重写历史之前分支看起来是什么样的,并且通常会为你丢失的任何内容提供一个哈希值。

或者在所有分支中执行相同的操作,git log -g --abbrev-commit --pretty=oneline --all

一旦您找到了提交,结帐主数据,并git reset --hard SHA强制将该分支指向正确的哈希值。但要确保你有正确的提交,否则你只会让事情变得更糟。 :)

答案 1 :(得分:-1)

您可以使用git revert commit_sha
如果以这种方式执行,则不会覆盖历史记录,并且将创建每个恢复的一次提交

否则,您可以使用commit_sha签出文件,然后提交更改。这种方式只会在历史记录中创建一个提交