git rebase 操作
git rebase -i HEAD~N 是 Git 中用于交互式修改提交历史的命令,常用于合并、重排或编辑多个提交。以下是关键用法和注意事项:
基本用法
命令格式
shell
git rebase -i HEAD~N
N:表示最近 N 次提交(如 HEAD~3 表示最近的 3 次提交)。
-i(交互模式):允许通过文本编辑器操作提交列表。
操作流程
执行命令后,Git 会打开编辑器显示提交列表(按时间倒序排列)。
每个提交前有操作指令(如 pick、squash),修改指令后保存退出即可。
常见操作指令
指令 | 缩写 | 作用 |
---|---|---|
pick | p | 保留提交(默认) |
reword | r | 保留提交,但修改提交信息 |
edit | e | 暂停 rebase,允许修改提交内容或拆分提交 |
squash | s | 合并到前一个提交,保留提交信息 |
fixup | f | 合并到前一个提交,丢弃当前提交信息 |
drop | d | 删除提交 |
示例:合并最近 3 次提交
shell
git rebase -i HEAD~3
将后两次提交的 pick 改为 squash 或 fixup,保存退出。
编辑合并后的提交信息,完成操作。
合并提交
- 开始修改最近n次提交,git rebase -i head~n,或git rebase -i head^^^(此处有n个^)
- 第一个pick,剩余的全部是squash
- 保存修改后,编辑提交信息,再保存,即完成合并。
删除提交
- 开始修改最近n次提交,git rebase -i head~n
- 修改待删除的提交前面为drop或d,其他提交前的pick不修改
- 保存修改后,编辑提交信息,再保存,即完成删除
注意事项
适用范围
仅限本地未推送的提交。已推送的提交使用此命令会破坏远程历史,需强制推送(git push -f),需谨慎操作。
冲突处理
若 rebase 过程中出现冲突:
解决冲突后执行 git add <文件>。
继续 rebase:git rebase --continue。
放弃操作:git rebase --abort。
特殊场景
修改最老的提交:使用 git rebase -i --root。
调整提交顺序:直接拖动提交行的顺序。
典型应用场景
合并冗余提交:将多个小提交合并为逻辑完整的提交。
修改提交信息:通过 reword 修正拼写错误或补充信息。
清理历史记录:删除敏感信息或临时调试代码的提交。
通过合理使用 git rebase -i,可以优化提交历史的可读性和整洁性,但需注意避免在公共分支上修改已共享的历史。