【问题标题】:GIT says I have no commits in repo -- how to recover?GIT 说我在回购中没有提交——如何恢复?
【发布时间】:2012-02-01 03:54:41
【问题描述】:

使用 Win7,64 位。

我使用 GitExtensions GUI,它已经运行了 3 个月。今天我做了一个提交,立即推送到我的服务器仓库,然后关闭。当我在当天晚些时候重新启动并尝试进行另一次(本地)提交时,GitExtensions 告诉我我从未提交过该存储库并显示了 119 个有更改的文件。

显然有些东西被炒了,所以我的第一个想法是从我的服务器存储库中拉取。你猜怎么了?服务器 repo 也显示我从未承诺过它。

然后我的下一个想法是 GitExtensions 在骗我。所以我搬到了 Tortoise GIT 并做了一个“查看日志”。你猜怎么了? GitExtensions 没有说谎。 Tortoise GIT 还表明我从未承诺过我的 repo。

当我在 repo 中实际浏览时,我可以看到所有目标文件,其时间戳看起来很合理,涵盖了我在这个项目上工作的 3 个月。

如何让 GIT 恢复并意识到我还有 3 个月的提交时间?我看到的唯一文章是关于如何恢复需要使用早期提交作为起点的单个丢失提交。显然这对我没有帮助,因为我看不到任何提交。

感谢您的帮助。

【问题讨论】:

    标签: git windows-7 recovery git-extensions


    【解决方案1】:

    检查你得到的“git log master”或任何其他分支。如果可行,您可以使用“git bundle”显式导出提交和所有相关对象。冲洗并重复询问 .git/refs 中的其他分支。

    最好下拉到命令行来解决这个问题。下载最新的 msysgit。

    【讨论】:

      【解决方案2】:

      首先,备份您的存储库,以便任何失败的修复尝试都不会损坏它。

      git fsck 可以帮助查找和修复存储库中的错误。

      git reflog 可以帮助您识别孤立提交并重建历史记录。

      "bad default revision" 错误的这个答案可能会有所帮助。

      如果 fsck 对您没有任何帮助,我的第一个想法是尝试将远程存储库的 HEAD 重置为一次提交,然后尝试重新克隆。

      【讨论】:

      • 仅供参考,当描述的错误发生时git reflog 实际上没有说“没有提交” - 所以它实际上没有用
      【解决方案3】:

      .git 文件夹还在吗?如果是,那就是 git 存储所有信息的地方。如果没有,那么就没有什么可以挽回的了。如果没有,那么您的本地 git 就消失了。如果.git 还在,请尝试运行 git log 看看它显示了什么。

      如果您的 .git 文件夹消失了,那么您应该能够从您的服务器进行“新”克隆以检索所有内容。

      【讨论】:

      • 是的,.git 文件夹在那里,我可以看到所有的对象仍然在那里。做了一个“git log”并得到这个消息:“fatal: bad default revision 'HEAD'。”
      • 而且我无法从服务器克隆。远程仓库表现出相同的行为。就像我使用的 GUI 工具损坏了提交,然后,因为我立即推送到服务器,损坏也被转移到服务器存储库。
      • 所以你的 GUI 工具在没有询问你的情况下执行了强制推送?!
      • 不,GUI 中有一个选项可以在提交后立即执行推送。我通常启用该选项,以便我的最新作品立即存储在两台不同的机器上。我想吸取的教训是通过我的开发机器的至少一次电源循环将服务器存储库保持在本地之后。
      猜你喜欢
      • 2018-10-17
      • 2022-10-24
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多