【问题标题】:How to recover a file history in git如何在 git 中恢复文件历史记录
【发布时间】:2014-06-06 13:21:31
【问题描述】:

在我工作的 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 失去了它的历史,我想我失去了三周的几个文件的工作。

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

【问题讨论】:

    标签: eclipse git history


    【解决方案1】:

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

    假设不是……

    git reflog 将向您展示 HEAD 的旧“化身”;它会记住某个分支在重写历史之前的样子,并且通常会为您丢失的任何内容生成一个哈希值。

    或者在所有分支上做同样的事情,git log -g --abbrev-commit --pretty=oneline --all

    一旦你找到了你的提交,checkout master 和git reset --hard SHA 强制将该分支指向正确的哈希值。但请确保您有正确的提交,否则只会让情况变得更糟。 :)

    【讨论】:

    • 您好,感谢您的帮助。我拥有这个 repo,没有其他分支。我需要恢复的提交完全消失了,找不到了。无论如何,特定文件提交似乎已从历史记录中随机删除,因为我可以看到我的所有历史记录,但特定文件提交历史记录已重置为随机日期。就像我发布的一个例子一样。
    • 等等,如果您仍然拥有完整的历史记录,您是如何失去数周工作的?您可以在您的问题中添加git statusgit log --all --graph --decorate --pretty='format:%h %n %s' 的样本吗?
    【解决方案2】:

    您可以使用git revert commit_sha
    如果您这样做,您的历史不会被覆盖,并且每次还原都会创建一个提交

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

    【讨论】:

    • 这似乎与问题无关。这是关于丢失的提交,而不是错误的提交。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2021-07-28
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多