git - 删除之间的多个提交

adi*_*moh 1 git git-commit

git 日志场景:

提交1

提交2

提交 3

提交 4

提交 5

提交 6

我需要删除 2-4 之间的提交,使最终的 git 日志为

提交1

提交 5

提交 6

最好的方法是什么?

Frx*_*rem 6

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

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

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

4e4c39d   Commit 1
fbdb7a2   Commit 2
f32770f   Commit 3
de3f6dd   Commit 4
942266a   Commit 5
a7e80a4   Commit 6
Run Code Online (Sandbox Code Playgroud)

然后您可以运行git rebase -i 434c39d434c39d在本例中,您不想更改的最旧的提交在哪里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
Run Code Online (Sandbox Code Playgroud)

您可以更改pick每个提交以更改其更改方式:fixupandsquash将删除该提交但保留更改(它们合并到前一个提交中),而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
Run Code Online (Sandbox Code Playgroud)

如果您不想保留这些提交中的更改,则可以更改fixupdrop