git 在这种情况下,有没有办法取回提交?

ftf50wuq  于 2022-11-27  发布在  Git
关注(0)|答案(2)|浏览(172)

今天我创建了一个git bare repo,并添加了一些dotfiles和configs。最重要的是我的qtile配置,因为我在上面做了很多工作。
添加完所有的东西后,我推了一下,一切都很好。
我这样做是因为我打算发行hop,在那之后我把我的磁盘清理干净(所有其他重要的文件都保存在云端)。
安装了新的发行版(EndeavourOS,在我使用Manjaro之前),并创建了一个新的git bare repo。
这就是出错的地方。它不允许我在添加远程repo后拉取文件,所以我想,让我添加并推送我在这台电脑中的所有内容(这并不多,因为它是一个全新的安装),即使它覆盖了一些东西,我也只会检查git并复制差异。
我强制推送了我添加的东西,因为我之前没有拉过,这个提交覆盖了我之前添加的所有重要配置的提交。
我去了github中的repo,所有文件都丢失了,只有一个提交显示(我强制推的那个)。
我知道我做了几件错误的事情,把自己在这种情况下,但我想知道是否有任何方法来恢复这些文件,我以前在我的回购协议,并被覆盖.

6tdlim6h

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个字符长的十六进制字符串作为引用名称。
yzckvree

yzckvree2#

不幸的是,一旦一个提交在Git中被覆盖,通常就不可能恢复丢失的数据。然而,在Git中有一些潜在的方法可以恢复丢失的数据,但它们通常需要使用专门的工具和技术,即使这样,成功的机会也不一定是肯定的。下面是一些你可以尝试的方法:

  • 使用git reflog命令查看仓库本地历史记录的最近更改列表。您可以识别包含丢失文件的提交,然后使用git reset命令将仓库"回滚"到该提交。注意,这将永久丢弃自该提交以来所做的任何更改,因此请确保您没有任何重要的更改需要保留。
  • 使用第三方工具,如Git Extensions或GitForce,尝试从存储库中恢复丢失的数据。这些工具通常有一些功能,可以帮助你更深入地挖掘Git的历史记录,并尝试恢复丢失的数据。请注意,这些工具并不保证有效,你可能需要尝试不同的选项,看看它们是否有效果。

注:一般来说,使用git pushgit push --force命令时要小心,因为它们可能会覆盖仓库中之前的提交。

相关问题