意外删除了 .git 文件夹 - 是否可以恢复?

18

我在Eclipse上整理我的软件包和其他内容,因为有太多的冗余。由于一个新手错误,我不小心删除了驱动器中的.git文件夹。是否有任何方法可以从GitHub恢复我的历史记录?我的存储库仍然在GitHub上处于活动状态,但是.git文件夹不再监控我想要进行版本控制的文件。

我对版本控制还很新,请事先谅解如果我犯了任何技术术语方面的错误。


1
你能恢复本地的.git文件夹吗?这对我来说似乎是最简单的解决方案。如果你不能恢复,那么你可能需要在本地机器上创建一个新的仓库并再次拉取分支。 - Tim Biegeleisen
3
不行 —— 这是我尝试的第一件事。虽然我认为我找到了解决方案。我成功地使用 Git GUI 应用程序进行了克隆。有相当多的文件夹,我的旧 .java 文件与克隆后的新更新文件不同。只需提取 .git 文件夹,复制到我的新包中,删除克隆文件夹,看起来就完成了工作。 - user3186023
好的,非常感谢您提供的有益评论 :) - user3186023
1
输入命令 cd path/where/you/want/the/repo,将路径替换为您想要的路径,然后输入命令 git clone https://github.com/libgit2/libgit2,将 URL 替换为您在 GitHub 上的存储库的正确 URL。 - Tim Biegeleisen
好的,非常感谢。我做了各种各样的事情,比如输入我的用户名、分支等,这个方法行得通 :) - user3186023
显示剩余4条评论
2个回答

40

这就像Ajay的方法,但会在原地恢复.git文件夹,无需克隆和手动复制。

cd <repo-folder>
git init
git remote add origin <url>
git fetch
git reset origin/master

同样的警告也适用于此,如果您在其他分支中进行了更改但未将其推送到远程,则此方法将无效(据我所知,当删除.git文件夹时,这些更改都会丢失,但可能有人比我更了解此问题),但它不会重置本地副本上的本地更改(如果有任何更改),因此您可以随后按需添加和提交。

如果您确实有要/需要保留的本地更改,请务必不要执行git reset --hard命令。


这对我很有效。在执行上述最后一个命令后,如果您需要将稍后的更改推送到远程存储库,则应运行 git push --set-upstream origin master 以设置稍后推送的新引用。完成此操作后,您可以继续使用 git push 推送更改。 - Mycodingproject

4

这很容易。

从您当前所在的分支创建一个新的存储库,克隆自您的 GitHub 存储库。

git clone <repo_url> -b <branch_name>

现在要将您的更改还原,请将之前存储库的内容复制到此存储库中。您的存储库将具有相同的文件集。希望这可以帮助您。

附:如果您在其他分支上进行了更改但未推送到远程,则此方法无法使用。此外,此操作将删除所有未推送到远程的当前分支中的提交,但您将保留所有本地更改。


1
我认为我用了不同的方法。如何将一个github仓库的内容复制到另一个仓库?我只是使用了git GUI,我的旧仓库已经在github上了,将其克隆到桌面上的源文件夹中,并在提取.git文件夹后似乎解决了问题。 - user3186023
哦!我认为那是更好的方式 :) - Ajay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接