在早期提交中重写文件,然后将该更改无缝传播到所有后续提交

问题描述 投票:0回答:2

假设我有一系列这样的提交。

(0) Initial commit
(1) Version 1
(2) Version 2

我已经知道,我可以通过使用

git rebase
编辑提交 0 中的
README
来重写历史记录,而无需创建新的提交。但是如何将该更改传播到所有较新的提交呢?如果我不这样做,看起来就像我在提交 0 中有一个部分,然后我在提交 1 中删除了它。

本质上,我希望历史记录看起来像我对

README
所做的更改实际上从一开始就一直存在,而不创建任何新的“合并”提交。

git git-rebase git-rewrite-history
2个回答
2
投票

要完成您想要的任务,您可以使用交互式变基,您可以在其中指定要编辑第一个提交。

运行

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
命令。


0
投票

如果您使用

git rebase
更改初始提交,则该更改将自动传播到以后的提交。如果您使用
git filter-repo
(或旧的
git filter-branch
),那么您必须在每次提交中进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.