改写历史后,Github公共存储库陷入混乱

时间:2018-08-30 10:02:34

标签: git github open-source git-filter-branch

我在GitHub公共存储库lyrgard/ffbeEquip上遇到了问题,对此我是一个很大的贡献。

最近,主要的维护者和开发人员Lyrgard意识到在某些提交信息中使用了他的工作电子邮件地址。

因此,他遵循this helpful Github script将所有工作电子邮件替换为他的个人电子邮件。这样,git历史记录就被完全重写了。我们知道当然这不是我们应该轻易做的。但是他不能冒险将自己的工作地址与自己的爱好项目相关联。

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

Github script对此没有任何说明。我们试图在网上搜索答案,但找不到任何有用的信息。我们相信git到此为止,我们还不是专家。

我们实际尝试的操作:

我们真的很想了解发生了什么,当前情况如何以及如何解决它。

非常感谢您的帮助。

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

以下是主服务器上的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...

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

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

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

  1. 他将存储库克隆到一个干净的临时存储库中
  2. 他在此仓库中使用github脚本filter-branch重写历史记录
  3. 他将全新的历史推向GitHub。
  4. 删除临时仓库。 现在,一切都很好
  5. 上床睡觉。第二天早上,转到他的常规仓库,从Github中提取更改
  6. 稍作努力,提交并推送到Github。 这实际上不再适用了

现在GH有两个历史记录(旧的和新的),因为在第二个(通常的)存储库中,他应该重新设置基准或删除并克隆一个新的记录。

现在我们知道发生了什么,我们需要能够从历史记录中还原此合并

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

1 个答案:

答案 0 :(得分:0)

好的,一切恢复正常。

实际上使我们省下来的是Lyrgard仍然拥有他曾经用于filter-branch的临时存储库。这是一个“干净的”回购协议,仅包含新的历史记录,但是其日期为昨天(即缺少今天的提交)。

我们做了什么:

  1. 将当天的每个新提交(共3次提交)保存在单独的补丁文件中。
  2. 将临时“干净”的仓库克隆到另一个仓库中
  3. 应用补丁并每次提交(带有相同消息)
  4. 强行将此仓库回购到Github。 GitHub现在很干净。
  5. 删除所有其他本地存储库
  6. 从Github克隆

最后……感谢matthiasbe的帮助。