是否有可能重写很老的git历史来进行开发分支

时间:2019-03-18 14:37:44

标签: git rebase git-flow git-rewrite-history

我正在使用git flow。我制定了一些规则来保持git历史记录的干净,因为我从这些提交生成了changelog。

但是一些旧的提交(直接进行开发)或合并的功能分支不遵循这些规则。是一种简便的方法来压缩这些旧提交,而不影响所有当前分支(主,版本标签等)吗?

我熟悉功能分支内部的变基,但是我无法想象如何在开发/主分支内部进行变基。

1 个答案:

答案 0 :(得分:1)

不。 Git是一个简单的区块链,其中每个块(提交)都在其中包含对先前块ID的引用。在Git中,块ID只是其内容的哈希,因此,即使更改一点内容,哈希也会改变,因此Id也是如此。由于父ID是块内容的一部分,因此,如果不更改以下所有块,就不能更改这些早期块。改变父母意味着您需要改变孩子,这意味着您需要改变孩子的孩子,等等。

这是完全有可能的,但是它将使每个基于旧提交在功能分支上工作的人都感到头疼。除非您删除并重新创建每个提交,否则还会破坏所有标记,这些标记将继续指向原始提交,这可能会使正在进行构建等工作的任何人脱离旧的标记指针。

基本上,您将不得不经历一个混乱的历史,拒绝遵守更现代的原则。有点像现实生活。

此规则的唯一例外是,您是否可以找到某种方法来破解那些原始提交以生成hash collisions。这会欺骗以下提交,使他们认为它们仍指向原始提交。这不容易实现,并且几乎肯定是不希望的,因为被黑客入侵的提交看起来像是一团糟,但是Git uses SHA-1has been cracked,因此从技术上来说是可能。 / p>