Git:替换所有提交作者而不改变历史记录

时间:2017-07-08 15:47:00

标签: git

我想在将更改推送到另一个存储库之前替换所有提交作者姓名和电子邮件。我需要进行更多更改并将其推送给替换作者。但与此同时,我想在第一次回购中保留原作者。

我发现了很多类似的问题,但他们都提出了重写历史的解决方案。这将使以后进行更多提交成为问题。

2 个答案:

答案 0 :(得分:3)

我认为这甚至不可能。提交消息哈希包括作者以及其他参数,因此您无法保持相同的提交并更改其作者。重写历史是唯一的选择。但是,您只能在第二个存储库中进行更改,而不能在第一个存储库中进行更改。

答案 1 :(得分:1)

放大别人说的话:历史提交。提交由哈希ID标识。哈希ID是提交的密码校验和。内容。如果你在任何提交中改变任何东西 - 甚至是一个位 - 校验和都会改变,所以你有不同的提交,所以你有不同的历史。

  

......他们都提出了重写历史的解决方案。这将使以后进行更多提交成为问题。

这里有两个不同的观察结果:

  1. 提交校验和,而密码复杂, 1 是完全确定的。这意味着如果您对相同的输入进行相同的更改,您将获得相同的结果。因此,只要您拥有更改规则集和原始输入,就可以随时构建旧到新哈希ID的表。

    您可以使用这个旧的⟷新映射来计算不同存储库的子图的正确连接,这个子图仅使用" old"并且使用任何旧的和/或新的混合。那只是small matter of programming。 :-)根据你对这个问题的关注程度,它绝对可以解决。请注意,在进行更改时必须使用完全确定的过程 - 例如,您需要保持作者和提交日期不变,或者以确定的方式更改它们。

  2. 由于git notes,通常根本不需要做任何此事。而不是将旧提交复制到新提交,只需将注释附加到旧提交。

  3. 1 鉴于SHA-1现在technically breakable给出了足够的计算时间和/或金钱问题,它不再准确地说"安全",因此"复杂"。但是,这仍然是不切实际的。