【问题标题】:can i restore a .git file after rm-rf?我可以在 rm-rf 之后恢复 .git 文件吗?
【发布时间】:2016-06-28 00:50:44
【问题描述】:

我需要拉出 master 分支,但在将其合并到我的本地 master 时遇到问题,因此认为只需 rm -rf 整个文件夹即可。这是迄今为止我一生中最大的错误,因为我在 .git 中提交的一个未推动的本地分支中工作了数周。有人可以告诉我有什么方法可以找到并恢复它吗?如果有什么不同,我在 Windows 机器上。

谢谢大家。

【问题讨论】:

  • local branch commited in my .git. ...您是说在执行git rm -rf 之前对该分支进行了一次或多次本地提交?
  • 一般rm -rf会删除整个目录。我建议阅读 here 以了解如何将损害降到最低。
  • @TimBiegeleisen,是的。这就是我要说的。我做了几个未推送的提交。
  • 请在您的问题中明确说明您删除了哪些内容(完整的源目录、.git 目录或两者都删除了)以及剩下的内容(如果有的话)。我发布了一个答案,但后来意识到它仍然有点模棱两可。
  • 你真的删除了你的.git文件吗?

标签: git repository delete-file restore


【解决方案1】:

好吧,所以我的 git 历史(我愚蠢地删除的 .git 文件)显然已经失去了所有希望——但是!所有希望都没有最终失去,因为遵循Lincoln Spector 的明智建议,我能够恢复所有已删除的工作目录,大部分 其中处于最新状态,而 rest 其中(我仍然非常感谢这些)只是过时了几天。 Recuva Portable,这只是那里推荐的一种策略,它刚刚为我节省了几天的工作时间和几百万根头发。

感谢您的所有回答。我只是把它扔进去,因为我得到的最好的东西告诉我使用某种形式的系统恢复/Windows 备份/恢复点,如果我一直在预防性地使用这些功能,那就太好了。唉,我不是。所以我不得不走肮脏的路线。因此,如果有人足够聪明并且已经在使用这些功能,那么一定要走其他答案中提供的路线,尤其是 Tone。如果有人像我一样在过去和现在都失败了,Recuva 工作得很好。

【讨论】:

    【解决方案2】:

    如果您使用的是 Windows 备份,请访问 https://support.microsoft.com/en-us/help/17119/windows-7-recover-lost-deleted-files

    【讨论】:

    • 你怎么知道他从来没有承诺过他的工作?在你知道病人已经死之前,推迟埋葬。
    • @Rohit,虽然我是,但我最后一次检查点是在我最近添加到我正在处理的文件之前:/ 谢谢,虽然
    • @TimBiegeleisen 无论他是否承诺,这都会奏效。
    • 病人死了,这个答案适用。
    【解决方案3】:

    .git 实际上是一个包含本地存储库的文件夹。在删除时,您删除了您的历史记录。

    如果您只删除了存储库(.git 文件夹)而不是父源目录,则最新版本的代码文件应该仍然存在于源目录中。如果您删除了整个源文件夹以及存储库,则需要查看恢复文件。

    由于您在 Windows 上,如果您没有备份,系统还原可能是您唯一的选择。

    • 右键单击您拥有的任何父文件夹(源 目录,或者如果没有,则包含它的文件夹)。
    • 转到“以前的版本”选项卡,查看您是否有以前的版本 那里的文件夹。

    您可能无法完全恢复,但如果您有最近的图像,您可能会恢复一些工作。

    如果您对此不满意,则需要对文件恢复进行更多研究。有可用的应用程序。如果这是您需要走的路线,我建议您不要写入磁盘(最好完全不要)。

    【讨论】:

      【解决方案4】:

      我想分享我的类似经历并给予一些希望。

      背景

      在我的公司,我们还没有迁移到 git 并且仍然使用 TFVC 进行版本控制。由于 git 在一切方面都非常出色,因此我开始使用本地 git 存储库来完成我的工作。工作流程基本上是使用 git 作为草稿工作区,然后在准备就绪时分块提交到 TFVC。问题是我的 git 存储库只是本地的。

      程序

      为了签入到 TFVC,我保留了一个 sync 分支,该分支与 TFVC 分支保持同步。所以我有本地 git 分支feature-1feature-2 等。然后我检查我的sync 分支。确保它与 TFVC 同步,将我要提交到 TFVC 的 git 内容合并到 sync,提交到 TFVC。

      问题

      很难描述 TFVC 造成的痛苦和折磨,而不是完全抨击创造它的人,我至少希望这是他们的最佳意图。假设 git 在我看来是一款出色的软件,而我使用 TFVC 的经历并不完全愉快。

      为了控制我的提交(并且因为 TFVC 不够出色),我通过将本地工作区与服务器同步来启动该过程。为此,您可以使用命令tf reconcile 和选项clean,本质上是“获取服务器工作区”。现在,我的 git 存储库位于 TFVC 存储库中(错误)。 TFVC 背后的好人决定 tf reconcile /clean 的合适默认值是清理被忽略的文件 (??)。通常,这不是问题,因为您会得到一个可爱的 (/s) GUI(???),它会提示您要清理的文件。

      也许你是一个不喜欢终端的人,在这种情况下你可能会使用 Power Shell 之类的东西。或者,也许你喜欢它是可怕的,所以你使用命令提示符。我,我喜欢 bash。问题是由于未知的原因,在 bash 中没有显示上述提示。我的意思是,你在 bash 中,所以你为什么要打开一个愚蠢的 GUI 窗口。由于 GUI 没有显示,失败或其他什么,接下来发生的事情是一件美丽的事情。 TFVC 只是继续。

      结果

      $ tf reconcile //clean
      Deleting .git
      $ git status
      fatal: not a git repository (or any of the parent directories): .git
      

      ...

      解决办法

      谢天谢地,TFVC 并没有彻底摧毁一切。事实证明,不理会一些事情已经足够好了(这似乎有些武断)。

      在恐慌之后,我下载了 Recuva,试图解开 TFVC 刚刚做了什么。

      原来它能够恢复.git 文件夹中的一些文件。一堆二进制哈希文件,但似乎更重要的是,像HEAD 这样的文件。

      我恢复了可以恢复到单独驱动器上的单独文件夹的删除文件(以避免写入扇区)。然后将原始位置复制到恢复的位置(不覆盖)。瞧:

      $ git status
      On branch main
      

      与原始位置进行比较得到:

      Only in .git: COMMIT_EDITMSG
      Only in .git: config
      Only in .git: config_1
      Only in .git: description
      Only in .git: HEAD
      Only in .git: HEAD_1
      

      事实证明,TFVC 使大部分存储库完好无损,文件恢复足以让本地存储库重新启动并运行。有些东西似乎丢失了,比如存储,但我在 git 中而不是在 TFVC 中提交给分支的工作似乎可以恢复。

      外卖

      • 取决于已删除的内容和可以恢复的内容,它是 您可能可以恢复已删除的 git 存储库。我想象它 取决于哪些文件被删除/可恢复。
      • 只有在讨厌生活的情况下才使用 TFVC

      编辑

      如果在我的情况下,大部分 git repo 都完好无损(或者如果大部分是可恢复的),则可能只运行 git init

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-09
        • 2015-05-23
        • 2011-02-28
        • 2019-06-01
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 2022-01-17
        相关资源
        最近更新 更多