Skip to content

git rebase 操作

git rebase -i HEAD~N 是 Git 中用于交互式修改提交历史的命令,常用于合并、重排或编辑多个提交。以下是关键用法和注意事项:

基本用法

命令格式

shell
git rebase -i HEAD~N

N:表示最近 N 次提交(如 HEAD~3 表示最近的 3 次提交)。

-i(交互模式):允许通过文本编辑器操作提交列表。

操作流程

执行命令后,Git 会打开编辑器显示提交列表(按时间倒序排列)。

每个提交前有操作指令(如 pick、squash),修改指令后保存退出即可。

常见操作指令

指令缩写作用
pickp保留提交(默认)
rewordr保留提交,但修改提交信息
edite暂停 rebase,允许修改提交内容或拆分提交
squashs合并到前一个提交,保留提交信息
fixupf合并到前一个提交,丢弃当前提交信息
dropd删除提交

示例:合并最近 3 次提交

shell
git rebase -i HEAD~3

将后两次提交的 pick 改为 squash 或 fixup,保存退出。

编辑合并后的提交信息,完成操作。

合并提交

  1. 开始修改最近n次提交,git rebase -i head~n,或git rebase -i head^^^(此处有n个^)
  2. 第一个pick,剩余的全部是squash
  3. 保存修改后,编辑提交信息,再保存,即完成合并。

删除提交

  1. 开始修改最近n次提交,git rebase -i head~n
  2. 修改待删除的提交前面为drop或d,其他提交前的pick不修改
  3. 保存修改后,编辑提交信息,再保存,即完成删除

注意事项

适用范围

仅限本地未推送的提交。已推送的提交使用此命令会破坏远程历史,需强制推送(git push -f),需谨慎操作。

冲突处理

若 rebase 过程中出现冲突:

解决冲突后执行 git add <文件>。

继续 rebase:git rebase --continue。

放弃操作:git rebase --abort。

特殊场景

修改最老的提交:使用 git rebase -i --root。

调整提交顺序:直接拖动提交行的顺序。

典型应用场景

合并冗余提交:将多个小提交合并为逻辑完整的提交。

修改提交信息:通过 reword 修正拼写错误或补充信息。

清理历史记录:删除敏感信息或临时调试代码的提交。

通过合理使用 git rebase -i,可以优化提交历史的可读性和整洁性,但需注意避免在公共分支上修改已共享的历史。