删除.git文件夹后,如何从备份中恢复Git历史记录?

时间:2019-04-09 13:56:48

标签: git github

我弄乱了我的项目,花了数小时试图修复它。我放弃了,删除了它,然后不得不下载我在GitHub上工作的那个。我解压缩了文件,使它再次统一运行,做了很多工作。然后我想将其提交到GitHub,并且在尝试推送时遇到Git错误,因此我接受了这些人的建议,告诉我:

  1. 从文件夹中删除.git/目录。然后执行以下命令:
  2. git init
  3. git add .
  4. git commit -m "First Commit"
  5. git remote add origin [url]
  6. git push -u origin master

当我删除.git/并将文件夹推送到我的仓库时,它摆脱了我的提交历史。我曾尝试寻找git reset --hard b1719639之类的解决方案,但是由于我在提交后从文件夹中删除了.git/,因此无法恢复到以前的提交,因为它们已经消失了。我仍然有.git/文件夹。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

您极有可能无法恢复历史记录。但是,当您运行git init时,本地存储库将重新初始化为github存储库的HEAD。此时,如果您运行git status,您仍然会看到github HEAD和您当前状态之间的变化。确保提交并推动这些操作。 请勿结帐或重设,否则您可能会永远失去一切。

答案 1 :(得分:0)

通常来说,请勿触摸您的.git/目录。使用git命令(最好是高级“瓷”命令,而不是低级“管道”命令),并让 it 修改.git/中的内容。

更重要的是,不要运行您不理解的命令。盲目复制和粘贴命令是遇到麻烦的好方法。 ,问问题。 ,搜索Internet。但是,在使用发现的内容之前,请 阅读 。在尝试之前,您想知道它应该做什么。这对于涉及sudo的任何命令特别重要,但是一般来说,这是一个很好的建议。我将尝试清楚地解释我建议在下面运行的每个命令。如果您不理解其中之一,请查看相关文档或进行澄清

好吧,现在,让我们看看是否可以摆脱困境。您说您有旧.git/目录的备份副本。这应该包含您所有的历史记录。备份新的.git/并放回旧的.git/,然后运行git log以查看您的本地历史记录。希望您会看到以前的提交。

然后运行git status。我认为您会发现一堆更改过的文件。运行git diff,以查看工作副本和上一次提交之间的区别。这应该是自您第一次删除.git/目录以来所做的所有更改。

如果这些更改构成一个逻辑提交,那就太好了。您可以像往常一样添加它们并提交。如果它们应该是多次提交,则可以进行多次提交。如果您想保留第二个.git/目录中的多个提交,则可以将其添加为file://远程对象,获取一个分支,并进行一些合并/重定基/摘樱桃。显然,这部分非常取决于您拥有什么和需要什么。

最后,一旦您在git log中看到了期望,就必须将其推回GitHub。再一次,您需要进行推力。一般而言,强制推送是一项危险的操作(如您所知),因此使用时要格外小心¹。在这种情况下,这可能是有道理的。


¹在大多数情况下,--force-with-lease--force更可取。在这种情况下,我认为不值得从GitHub上获取旧引用来使--force-with-lease正常工作。