Github public 重写历史后存储库搞砸了

Github public repository messed up after history rewritten

我们的 GitHub public 存储库 lyrgard/ffbeEquip 有问题,我是其中的重要贡献者。

最近,主要维护者和开发者Lyrgard发现他的工作邮箱被用于一些提交信息。

因此,他按照 this helpful Github script 将所有工作电子邮件替换为他的个人电子邮件。因此,git 历史被完全改写。我们 知道 当然这不是一件应该轻易做的事情。但他不能冒险让他的工作地址与他的爱好项目相关联。

但是,问题是现在我们有多个过去的提交。甚至我的提交都显示了两次!

Github script 什么也没说。我们试图在网上搜索答案,但找不到任何有用的信息。我们不是 git 方面的专家,我相信您现在已经明白了。

我们实际尝试的是:

我们很想了解发生了什么,目前的情况如何,我们该如何解决。

非常感谢您的帮助。

[首先编辑以添加详细信息]

这是 master 上的 git log 输出:

commit b2d98cb6674b0a9d2c457cdcf5bf7dc1271d87c5 (HEAD -> master, origin/master)
Author: Lyrgard <lyrgard@gmail.com>
Date:   Thu Aug 30 06:55:43 2018 +0200

    added Golden Apple to recently released items

commit 850244a19880ddcbc0637a17ab01241d6ef0133a
Merge: 362d9a14 ef8c6e12
Author: Lyrgard <lyrgard@gmail.com>
Date:   Thu Aug 30 06:53:18 2018 +0200

    Merge branch 'master' of https://github.com/lyrgard/ffbeEquip

commit 362d9a1409470bd498e5787daa7817400aedd5f1
Merge: 99618a7e 1bca87ad
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:04:46 2018 +0200

    Merge branch 'Indigo744-encyclopedia_killers'

commit ef8c6e125e6d76d04a0fe28e74fce5439bc4f9f2
Merge: 09722cee 8c1b8394
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:04:46 2018 +0200

    Merge branch 'Indigo744-encyclopedia_killers'

commit 1bca87ad243079e0df0599a8e8e414b75b580f68
Merge: 99618a7e 4ce21f1e
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:02:28 2018 +0200

    Merge branch 'encyclopedia_killers' of https://github.com/Indigo744/ffbeEquip into Indigo744-encyclopedia_killers

commit 8c1b83944ade8dbc1eaf1576df00c8e4c46a051b
Merge: 09722cee 5fc10187
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:02:28 2018 +0200

    Merge branch 'encyclopedia_killers' of https://github.com/Indigo744/ffbeEquip into Indigo744-encyclopedia_killers

如你所见,有两个Merge branch 'Indigo744-encyclopedia_killers'和两个Merge branch 'encyclopedia_killers' of...

当然,commit sha 是不相等的(否则,我认为会有很大的问题)但是我不明白为什么会有多个提交?

[第二次编辑以添加有关 发生的更多详细信息]

在评论中与@matthiasbe 讨论并仔细审查 git 分支(并与 Lyrgard 讨论)后,这里实际发生了什么:

  1. 他将存储库克隆到一个干净的临时存储库中
  2. 他在这个 repo 上使用 github 脚本 filter-branch 来重写历史记录
  3. 他把整个新历史推向了GitHub。
  4. 删除临时存储库。 现在,一切都很好
  5. 去睡觉了。第二天早上,去他通常的仓库,从 Github
  6. 中提取更改
  7. 对其进行一些处理,提交并推送到 Github。 这里其实是不行的地方

现在 GH 有两个历史记录(旧的和新的),因为在第二个(通常的)repo 中,他应该有 rebase 或删除并克隆一个新的。

现在我们知道发生了什么,我们需要能够从历史中恢复这个合并

我正在查看 rebase -i 命令,但找不到任何合并提交。我们将不胜感激。

好的,一切恢复正常。

真正拯救我们的是 Lyrgard 仍然拥有他用于 filter-branch 的临时存储库。这是一个 "clean" 回购协议,意味着只有新的历史记录,但日期是昨天的(即缺少今天的提交)。

我们做了什么:

  1. 将当天的每个新提交(它们是 3 个提交)保存在单独的补丁文件中。
  2. 克隆临时 "clean" 回购到另一个
  3. 每次应用补丁并提交(使用相同的消息)
  4. 强制将此 repo 推送到 Github。 GitHub 现在干净了。
  5. 删除所有其他本地存储库
  6. 从 Github
  7. 克隆

终于...谢谢matthiasbe的帮助。