我可以在rm-rf之后恢复.git文件吗?

时间:2016-06-28 00:50:45

标签: git repository delete-file restore

我需要拉动主分支,但是在将它合并到我的本地主机时遇到了问题,因此我认为只需rm -rf整个文件夹即可。这是我迄今为止生命中最大的错误,因为我在我的.git中提交了一个未经处理的本地分支。有人可以告诉我有一些方法找到并恢复这个?如果它有所作为,我就在Windows机器上。

谢谢大家。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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

您可能无法完全恢复,但如果您有最近的图片,则可能会得到一些恢复。

如果你没有运气,你需要对文件恢复做更多的研究。有应用程序可用。如果那是您需要的路线,我建议不要写入磁盘(最好不要写入磁盘)。

答案 2 :(得分:1)

好吧,所以我的git历史(我愚蠢地删除了.git文件)显然都失去了所有的希望 - 但不过!所有希望都没有最终丢失,因为遵循Lincoln Spector的sage建议,我能够恢复所有我删除的工作目录,大多数< / strong>处于最新状态,其中 rest (我仍然非常感激这些)仅仅过了几天。 Recuva Portable,这只是那里推荐的一种策略,刚刚为我节省了数天的工作量和数百万发。

感谢所有答案。我只是把它扔进去,因为我告诉我使用系统恢复/ Windows备份/恢复点的某种形式或其他形式,如果只是我一直在预防性地使用这些功能,这将是很好的。唉,我不是。所以我不得不走脏路。因此,如果有人足够智能已经使用这些功能,请务必使用其他答案中提供的路线,尤其是 Tone 。如果有人像我一样在过去和现在都失败了,Recuva效果很好。

答案 3 :(得分:0)

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

背景

在我公司,我们尚未迁移到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存储库内(misstake)。 TFVC背后的好伙伴决定tf reconcile /clean的合适默认值是清除被忽略的文件(??)。通常,这不是问题,因为您会得到一个可爱的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