【问题标题】:Github public repository messed up after history rewritten重写历史后 Github 公共存储库搞砸了
【发布时间】:2018-08-30 10:02:33
【问题描述】:

我们的 GitHub 公共存储库 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 是不相等的(否则我认为会有很大的问题)但我不明白为什么会有多个 commit?

[第二次编辑以添加更多关于发生了什么的细节]

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

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

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

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

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

【问题讨论】:

  • the issue is that now we have multiple past commits 我不明白这怎么可能,抱歉。你有什么主意吗 ?您的 git log 命令是否有几个相同的过去提交?
  • 好吧,看看这里:github.com/lyrgard/ffbeEquip/commits/master 你会看到的。我可能会在帖子中添加更多详细信息
  • 根据您使用的脚本页面上给出的note,每个协作者都必须按原样拉取repo,而无需合并或推送您的本地更改。对我来说,这可能来自某人拉/推旧历史,而它是由脚本重写的。这是我的解释,它无助于解决它:p
  • this thread我认为他们和你有同样的问题并得出了同样的结论
  • 我认为你可能是对的。似乎罪魁祸首是this commit,Lyrgard 将一个主分支合并到...本身?这就是历史开始被复制的地方......

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


【解决方案1】:

好的,一切恢复正常。

真正拯救我们的是,Lyrgard 仍然拥有他用来存放 filter-branch 的临时存储库。这是一个“干净”的 repo,意味着只有新的历史记录,但从昨天开始(即缺少今天的提交)。

我们做了什么:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2021-01-25
    • 2020-02-15
    • 1970-01-01
    • 2014-04-28
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多