【问题标题】:Is there a way to get back the commits in this case?在这种情况下有没有办法取回提交?
【发布时间】:2022-11-23 12:51:05
【问题描述】:

我今天创建了一个 git bare repo,并添加了一些点文件和配置。最重要的是我的 qtile 配置,因为我在它上面做了很多工作。

添加所有内容后,我推动一切都很好。

我这样做是因为我打算发行跳跃,然后我将磁盘清理干净(所有其他重要文件都保存在云中)。

安装了新的发行版(EndeavourOS,在我使用 Manjaro 之前)并创建了一个新的 git bare repo。

这是出了问题。它不允许我在添加远程存储库后提取文件,所以我想,让我现在就添加并推送我在这台 PC 中的所有内容(因为它是全新安装,所以不多),即使它覆盖了一些东西,我只会检查 git 并复制差异。

好吧,我强行推送了我添加的东西,因为我之前没有进行过拉动,所以该提交覆盖了我之前所做的之前的提交,其中我添加了对我来说很重要的所有配置。

我去了 github 中的 repo,所有文件都丢失了,只有一个提交显示(我强制推送的那个)。

我知道我做错了几件事让自己陷入这种情况,但我想知道是否有任何方法可以恢复我以前在我的回购中拥有的那些文件并被覆盖。

【问题讨论】:

  • 你用过git reset --hardgit push --force
  • 您可以使用 git reflog 查看硬重置之前的旧提交。

标签: git push


【解决方案1】:

不幸的是,一旦提交在 Git 中被覆盖,通常无法恢复丢失的数据。然而,有一些潜在的方法可以恢复 Git 中丢失的数据,但它们通常涉及使用专门的工具和技术,即使那样,也不能保证成功的机会。以下是您可以尝试的几个选项:

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

注意:一般来说,使用git pushgit push --force 命令时一定要小心,因为它们会覆盖存储库中以前的提交。

【讨论】:

    【解决方案2】:

    GitHub 有一个events API

    在此类事件的有效负载中查找 PushEvents 和 "before" 字段。

    获得提交哈希后,您应该能够运行git fetch origin <sha>,然后运行git checkout <sha>:README.md

    笔记:git fetch origin <sha> 中的 <sha> 应该是完整的 40 个字符 sha1,而不是短 sha——github 会将任何不是 40 个字符长的十六进制字符串的内容视为参考名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多