压缩较旧的提交,同时保留较新提交的 SHA1

Squash older commits while preserving SHA1s of newer commits

我有这样的提交历史:

f85179d ten
7de4071 nine
5c7a482 eight
9585035 seven
b41bffc six
d102f05 five
5a28cb9 four
6fc27c9 three
524b0c7 two
bb7e6ae one

我想将 "one" 到 "five" 的提交压缩成一个提交,这样它看起来像这样:

f85179d ten
7de4071 nine
5c7a482 eight
9585035 seven
b41bffc six
4tg56y5 Squash five commits into one commit.

重要的是,我想为未压缩的提交保持相同的 SHA 值。这意味着我不能只使用 `git rebase --root -i",因为它会改变所有的哈希值。

无法重写您的 git 存储库的历史 并且 维护现有提交的提交 ID。提交 ID 是根据给定提交的内容(包括目录树的内容、作者、提交者、日期等) 以及 其父项的 ID 生成的。这意味着如果您更改历史记录中的任何提交,每个后续提交都会有一个新的提交 ID。

有关 git 存储库格式的更多详细信息,请参阅 this doc, or this one