删除中间的多个提交



git log scenario:

提交 1

提交 2

提交 3

提交 4

提交 5

提交 6

我需要从制作最终的 git 日志之间删除提交 2-4 作为

提交 1

提交 5

提交 6

最好的方法是什么?

这就是变基的目的:更改提交的历史记录。

注意:变基或任何其他更改提交历史记录的操作将更改每个提交的提交哈希,因此历史记录彼此不兼容,如果任何更改的提交已被推送,则无法git push具有修改历史记录的提交。您应该只对在本地所做的更改执行此操作,但尚未推送。

如果你的 Git 日志一开始看起来像这样:

4e4c39d   Commit 1
fbdb7a2   Commit 2
f32770f   Commit 3
de3f6dd   Commit 4
942266a   Commit 5
a7e80a4   Commit 6

然后你可以运行git rebase -i 434c39d(其中434c39d是你不想更改的最早提交,在本例中Commit 1(。这将打开一个编辑器,其中包含所有提交的列表:

pick 4e4c39d Commit 1
pick fbdb7a2 Commit 2
pick f32770f Commit 3
pick de3f6dd Commit 4
pick 942266a Commit 5
pick a7e80a4 Commit 6

您可以更改每个提交的pick以更改更改方式:fixupsquash将删除提交但保留更改(它们合并到上一个提交中(,而drop将删除提交及其中的更改。然后保存,关闭编辑器,git将变基并将您指定的更改应用于 Git 历史记录。

在您的示例中,如果您想删除提交但保留更改,例如,您可以这样做

pick  4e4c39d Commit 1
fixup fbdb7a2 Commit 2
fixup f32770f Commit 3
fixup de3f6dd Commit 4
pick  942266a Commit 5
pick  a7e80a4 Commit 6

如果不想保留这些提交的更改,可以将fixup更改为drop

最新更新