git - git - 有日志提交但缺少 .sln 文件,因此无法打开项目 - 如何恢复
问题描述
有什么方法可以使用 git 恢复我的项目文件。
这是场景....我在一个分支上工作了几天。 这个分支从未被推送到远程仓库,所以它完全是本地的。
我最终丢失了我的 .sln 解决方案文件,因此我无法再打开该项目,但在项目目录中我仍然有 .git 目录。
如果我发出 git log,我可以看到它列出了很久以前的提交,因此日志似乎存在。
有没有办法以某种方式在这些日志中找到文件或根据日志中的提交恢复我的项目?还是有其他方法?
更新
感谢@RomainValeri,git checkout <commit-hash>
它可以工作,但它将 HEAD 设置为分离状态。虽然这可能没什么大不了的,但后来我发现git reset --hard HEAD~1
效果更好,因为我不需要在最后一次提交中保留更改,因此使用--hard
会丢弃它们。如果您需要保留这些更改,则使用--soft
相反会将 HEAD 重置为您在上次提交之前的提交,并将上次提交中的更改添加到暂存区域。
git reset --hard HEAD~1
git reset --hard HEAD~2
git reset --hard HEAD~3
...
上面的命令重置 HEAD 指针 1, 2, 3, ... 在最后一次提交之前提交并丢弃之后的任何更改。如果您不想放弃这些更改,请使用--soft 而不是--hard,在这种情况下,这些更改将为您上演。
解决方案
是的,这就是 git 的原则:能够在开发的不同点恢复代码库。
基本上,任何提交都是一个快照。
所以请放心:如果您看到一长串日志,那么您不仅仅是在阅读静态日志。此输出是在执行时从您的 git 存储库中可用的提交构建的。提交包含一切。每个提交都是代码库的完整副本。
如果你这样做
git checkout <commitHash>
工作树(包含链接到 repo 的文件系统的目录)将被更新以反映给定提交中描述的状态。
您可以使用您已经知道的命令找到这些提交哈希git log
,因此使用它来读取提交消息以确定您要检查的快照,存储/复制其哈希(什么是 SHA-1 哈希?),并检查它.
推荐阅读
- javascript - 如何使用 mapbox-gl 为特征点设置单独的布局属性?
- javascript - 克隆表格中的滚动条时遇到问题
- c# - 我如何在 GTK+# 中使用 GtkGLArea?
- html - 自动增加 Class CSS 中的数字
- c++ - 在 C++ 中将字符串转换为链接字符列表时遇到问题
- javascript - 根据每个属性值jquery隐藏html元素
- java - 如何在没有 Eclipse 的情况下使用 WebSphere 8.5.5
- c# - 在 button1 上单击创建变量,在 button2 上单击使用在 button1 | 中创建的变量。C# WPF
- node.js - Axios - Cheerio 如何等待所有信息从服务器加载
- swift - 您如何根据用户输入发送通知?迅速