今天我创建了一个git bare repo,并添加了一些dotfiles和configs。最重要的是我的qtile配置,因为我在上面做了很多工作。
添加完所有的东西后,我推了一下,一切都很好。
我这样做是因为我打算发行hop,在那之后我把我的磁盘清理干净(所有其他重要的文件都保存在云端)。
安装了新的发行版(EndeavourOS,在我使用Manjaro之前),并创建了一个新的git bare repo。
这就是出错的地方。它不允许我在添加远程repo后拉取文件,所以我想,让我添加并推送我在这台电脑中的所有内容(这并不多,因为它是一个全新的安装),即使它覆盖了一些东西,我也只会检查git并复制差异。
我强制推送了我添加的东西,因为我之前没有拉过,这个提交覆盖了我之前添加的所有重要配置的提交。
我去了github中的repo,所有文件都丢失了,只有一个提交显示(我强制推的那个)。
我知道我做了几件错误的事情,把自己在这种情况下,但我想知道是否有任何方法来恢复这些文件,我以前在我的回购协议,并被覆盖.
2条答案
按热度按时间6tdlim6h1#
GitHub有一个事件API。
在有效负载中查找
PushEvent
s和"before"
字段以查找此类事件。一旦你得到了提交哈希值,你应该能够运行
git fetch origin <sha>
,然后运行git checkout <sha>:README.md
。git fetch origin <sha>
中的<sha>
应该是完整的40个字符sha1,而不是一个短的sha -- github将把任何不是40个字符长的十六进制字符串作为引用名称。yzckvree2#
不幸的是,一旦一个提交在Git中被覆盖,通常就不可能恢复丢失的数据。然而,在Git中有一些潜在的方法可以恢复丢失的数据,但它们通常需要使用专门的工具和技术,即使这样,成功的机会也不一定是肯定的。下面是一些你可以尝试的方法:
git reflog
命令查看仓库本地历史记录的最近更改列表。您可以识别包含丢失文件的提交,然后使用git reset
命令将仓库"回滚"到该提交。注意,这将永久丢弃自该提交以来所做的任何更改,因此请确保您没有任何重要的更改需要保留。注:一般来说,使用
git push
和git push --force
命令时要小心,因为它们可能会覆盖仓库中之前的提交。