交互式 Rebase

此示例旨在描述如何在交互模式下使用 git rebase。人们期望人们对 git rebase 是什么以及它的作用有基本的了解。

使用以下命令启动交互式 rebase:

git rebase -i

-i 选项指的是交互模式。使用交互式 rebase,用户可以更改提交消息,以及重新排序,拆分和/或压缩(合并为一个)提交。

假设你要重新排列最后三次提交。为此,你可以运行:

git rebase -i HEAD~3

执行上述指令后,将在文本编辑器中打开一个文件,你可以在其中选择如何重新设置提交。出于此示例的目的,只需更改提交的顺序,保存文件并关闭编辑器。这将根据你应用的订单启动 rebase。如果你检查 git log,你将看到你指定的新订单中的提交。

重写提交消息

现在,你已经确定其中一条提交消息含糊不清,你希望它更具描述性。让我们使用相同的命令检查最后三次提交。

git rebase -i HEAD~3

而不是重新排列顺序,提交将被重新设置,这次我们将在需要更改消息的提交中将 pick(默认值)更改为 reword

当你关闭编辑器时,rebase 将启动,它将停止在你想要重写的特定提交消息。这将允许你将提交消息更改为你想要的任何一个。更改消息后,只需关闭编辑器即可继续。

更改提交的内容

除了更改提交消息之外,你还可以调整提交所做的更改。要做到这一点,只需将 pick 更改为 edit 进行一次提交。Git 将在到达该提交时停止并在暂存区域中提供提交的原始更改。你现在可以通过取消暂存或添加新更改来调整这些更改。

只要暂存区域包含该提交中所需的所有更改,请提交更改。将显示旧的提交消息,并且可以对其进行调整以反映新的提交。

将单个提交拆分为多个

假设你已经提交了一个提交但稍后决定将此提交拆分为两个或更多提交。使用与以前相同的命令,将 pick 替换为 edit,然后按 Enter 键。

现在,git 将停止在你已标记为要编辑的提交中,并将其所有内容放入暂存区域。从那时起,你可以运行 git reset HEAD^将提交放入工作目录。然后,你可以以不同的顺序添加和提交文件 - 最终将单个提交拆分为 n 个提交。

将多个提交压缩为一个

假设你已经完成了一些工作并且有多个提交,你认为这些提交可能只是一次提交。为此你可以执行 git rebase -i HEAD~3,用适当数量的提交替换 3

这次用 squash 代替 pick。在 rebase 期间,你指示被压扁的提交将在之前的提交之上被压扁; 把它们变成一个单一的提交。