假设您的 git 历史记录如下所示:
1 2 3 4 5
1-5 是单独的修订版。您需要在保留 1、2、4 和 5 的同时删除 3。如何做到这一点?
当要删除的修订后有数百个修订时,有没有一种有效的方法?
要将修订版 3 和 4 合并为一个修订版,您可以使用 git rebase。如果要删除修订版 3 中的更改,则需要在交互式变基模式下使用编辑命令。如果要将更改合并到一个修订版中,请使用 squash。
我已经成功地使用了这种 squash 技术,但以前从未需要删除修订。“拆分提交”下的 git-rebase 文档有望为您提供足够的想法来弄清楚。(或者其他人可能知道)。
从git 文档:
从您希望按原样保留的最旧提交开始: git rebase -i <after-this-commit> 一个编辑器会被你当前分支中的所有提交触发(忽略合并提交),这些提交在给定提交之后。您可以将此列表中的提交重新排序为您心中的内容,您可以删除它们。该列表或多或少看起来像这样: 选择 deadbee 本次提交的单行 选择 fa1afe1 下一次提交的单行 ... 在线描述纯粹是为了您的乐趣;git-rebase 不会查看它们,而是查看提交名称(在此示例中为“deadbee”和“fa1afe1”),因此不要删除或编辑名称。 通过将命令“pick”替换为命令“edit”,您可以告诉 git-rebase 在应用该提交后停止,以便您可以编辑文件和/或提交消息,修改提交,并继续变基。 如果要将两个或多个提交合并为一个,请将命令“pick”替换为“squash”以进行第二次和后续提交。如果提交有不同的作者,它会将压扁的提交归于第一次提交的作者。
从您希望按原样保留的最旧提交开始:
git rebase -i <after-this-commit>
一个编辑器会被你当前分支中的所有提交触发(忽略合并提交),这些提交在给定提交之后。您可以将此列表中的提交重新排序为您心中的内容,您可以删除它们。该列表或多或少看起来像这样:
选择 deadbee 本次提交的单行 选择 fa1afe1 下一次提交的单行 ...
在线描述纯粹是为了您的乐趣;git-rebase 不会查看它们,而是查看提交名称(在此示例中为“deadbee”和“fa1afe1”),因此不要删除或编辑名称。
通过将命令“pick”替换为命令“edit”,您可以告诉 git-rebase 在应用该提交后停止,以便您可以编辑文件和/或提交消息,修改提交,并继续变基。
如果要将两个或多个提交合并为一个,请将命令“pick”替换为“squash”以进行第二次和后续提交。如果提交有不同的作者,它会将压扁的提交归于第一次提交的作者。