假设我有一系列这样的提交。
(0) Initial commit
(1) Version 1
(2) Version 2
我已经知道,我可以通过使用
git rebase
编辑提交 0 中的 README
来重写历史记录,而无需创建新的提交。但是如何将该更改传播到所有较新的提交呢?如果我不这样做,看起来就像我在提交 0 中有一个部分,然后我在提交 1 中删除了它。
本质上,我希望历史记录看起来像我对
README
所做的更改实际上从一开始就一直存在,而不创建任何新的“合并”提交。
要完成您想要的任务,您可以使用交互式变基,您可以在其中指定要编辑第一个提交。
运行
git rebase -i --root
以从历史记录的开头获取变基任务列表(因为您说要编辑初始提交)。
在提交选择窗口中,将初始提交设置为
edit
以及其余的 pick
:
edit sha0 (0) Initial commit
pick sha1 (1) Version 1
pick sha2 (2) Version 2
对 README 进行更改并使用
git commit --amend
提交它们,因为 rebase 应该会提示您,完成后运行 git rebase --continue
,Git 将在修改后的初始提交之上重写其余历史记录。
警告:如果您的历史记录中有任何合并,此操作将销毁它们。如果您确实想要保留合并,请将
--rebase-merges
选项添加到该 git rebase
命令。
如果您使用
git rebase
更改初始提交,则该更改将自动传播到以后的提交。如果您使用 git filter-repo
(或旧的 git filter-branch
),那么您必须在每次提交中进行更改。