是否可以为开发分支重写非常旧的 git 历史

Is it possible to rewrite very old git history for develop branch

我正在使用 git 流。我制定了一些规则如何保持 git 历史记录干净,因为我正在从这些提交中生成变更日志。

但是一些旧的提交(直接用于开发)或合并的功能分支不遵循这些规则。在不影响所有当前分支(master、版本标签等)的情况下压缩这些旧提交是否有一些简单的方法?

我熟悉功能分支中的 rebase,但我无法想象如何在 develop/master 分支中进行。

没有。 Git 是一个简单的区块链,因为每个区块(提交)都包含对前一个区块 ID 的引用。在 Git 中,块 ID 只是其内容的哈希值,因此当你更改内容时,即使是一点点,哈希值也会发生变化,因此 ID 也会发生变化。由于 parent Id 是块内容的一部分,因此您不能在不更改所有后续块的情况下更改那些早期的块。改变parent意味着你需要改变child,这意味着你需要改变child的children等

这是完全可能的,但是对于基于旧提交在功能分支上工作的每个人来说,这都会让他们非常头疼。它还会破坏你所有的标签,这些标签将继续指向原始提交,除非你删除并 re-create 每个标签,这可能会破坏任何正在进行构建等的人,脱离旧标签指针。

基本上,您将不得不忍受一段不符合更现代原则的混乱历史。有点像现实生活。

此规则的唯一例外是,如果您能找到一些破解这些原始提交的方法以生成 hash collisions. This would trick the following commits into thinking they're still pointing to the original commits. This would not be easy to pull off and is almost certainly not desirable as the hacked commits would look like a mess, but which has been cracked,那么技术上 是可能的