跳到主要内容

Git 交互式变基

什么是 Git 交互式变基?

Git 交互式变基(Interactive Rebase)是一种强大的工具,允许你修改提交历史。通过交互式变基,你可以重新排序提交、合并提交、编辑提交信息,甚至删除提交。这对于整理提交历史、修复错误或准备代码库进行合并非常有用。

备注

交互式变基会修改提交历史,因此在共享分支上使用时要格外小心。建议仅在本地分支上使用。

如何使用 Git 交互式变基

1. 启动交互式变基

要启动交互式变基,你需要指定一个提交范围。通常,你会从当前分支的某个提交开始变基。例如:

bash
git rebase -i HEAD~3

这将打开一个编辑器,显示最近 3 个提交的列表,类似于以下内容:

plaintext
pick abc123 Commit message 1
pick def456 Commit message 2
pick ghi789 Commit message 3

2. 选择操作

在编辑器中,你可以为每个提交选择不同的操作。以下是一些常见的操作:

  • pick:保留提交(默认操作)。
  • reword:保留提交,但编辑提交信息。
  • edit:保留提交,但暂停以允许你修改提交内容。
  • squash:将提交合并到前一个提交中,并允许你编辑提交信息。
  • fixup:将提交合并到前一个提交中,但丢弃当前提交的提交信息。
  • drop:删除提交。

例如,如果你想将第二个提交合并到第一个提交中,并将第三个提交的提交信息重新编辑,可以这样修改:

plaintext
pick abc123 Commit message 1
squash def456 Commit message 2
reword ghi789 Commit message 3

3. 保存并退出编辑器

保存并退出编辑器后,Git 将根据你的选择执行操作。如果你选择了 squashreword,Git 会再次打开编辑器,允许你编辑提交信息。

4. 完成变基

完成所有操作后,Git 会应用这些更改并更新提交历史。你可以使用 git log 查看新的提交历史。

实际案例

案例 1:合并多个提交

假设你有以下提交历史:

plaintext
commit abc123 Commit message 1
commit def456 Commit message 2
commit ghi789 Commit message 3

你希望将 Commit message 2Commit message 3 合并到 Commit message 1 中。你可以使用以下命令启动交互式变基:

bash
git rebase -i HEAD~3

然后在编辑器中将 def456ghi789 的操作改为 squash

plaintext
pick abc123 Commit message 1
squash def456 Commit message 2
squash ghi789 Commit message 3

保存并退出编辑器后,Git 会提示你编辑合并后的提交信息。完成后,提交历史将变为:

plaintext
commit abc123 New commit message

案例 2:重新排序提交

假设你有以下提交历史:

plaintext
commit abc123 Commit message 1
commit def456 Commit message 2
commit ghi789 Commit message 3

你希望将 Commit message 3 移到 Commit message 1 之前。你可以使用以下命令启动交互式变基:

bash
git rebase -i HEAD~3

然后在编辑器中重新排序提交:

plaintext
pick ghi789 Commit message 3
pick abc123 Commit message 1
pick def456 Commit message 2

保存并退出编辑器后,提交历史将变为:

plaintext
commit ghi789 Commit message 3
commit abc123 Commit message 1
commit def456 Commit message 2

总结

Git 交互式变基是一个强大的工具,可以帮助你整理提交历史、合并提交或重新排序提交。通过本文的学习,你应该能够熟练使用交互式变基来优化你的 Git 工作流。

提示

在使用交互式变基时,建议先在本地分支上进行测试,确保操作无误后再推送到远程仓库。

附加资源

练习

  1. 创建一个包含多个提交的本地分支,并使用交互式变基将这些提交合并为一个提交。
  2. 尝试重新排序提交,并观察提交历史的变化。
  3. 使用 reword 操作修改某个提交的提交信息。

通过练习,你将更好地掌握 Git 交互式变基的使用技巧。