git rebase -i(交互式 rebase)是一个强大的 Git 命令,用于修改提交历史。你可以用它来重新排序、合并、编辑、删除或拆分提交。
以下是详细的使用方法和常见场景:
1. 基本命令
git rebase -i [起点提交或分支]
[起点提交或分支]:可以是提交哈希、分支名或相对引用(如HEAD~3)。- 如果不指定起点,默认是当前分支的 upstream 分支或
HEAD。
示例:
# 修改最近 3 次提交
git rebase -i HEAD~3
# 基于远程分支交互变基(常用)
git rebase -i origin/main
2. 操作步骤
- 执行命令后,会打开一个文本编辑器(如 Vim),显示提交列表和操作指令:
pick a1b2c3d Commit message A pick d4e5f6g Commit message B pick g7h8i9j Commit message C - 每行前面的
pick表示对该提交执行的操作,你可以替换为其他命令(见下文)。 - 保存并退出后,Git 会按顺序执行你指定的操作。
3. 常用操作命令
| 命令 | 缩写 | 说明 |
|---|---|---|
pick |
p | 保留该提交(不做修改) |
reword |
r | 保留提交但修改提交信息 |
edit |
e | 暂停 rebase,允许修改提交内容(如添加文件) |
squash |
s | 将该提交合并到前一个提交中(并合并提交信息) |
fixup |
f | 类似 squash,但丢弃该提交的日志信息 |
drop |
d | 删除该提交(从历史中移除) |
exec |
x | 执行 shell 命令 |
4. 常见使用场景
✅ 合并多个提交为一个
pick a1b2c3d Feat: add user login
squash d4e5f6g Fix: typo in login page
squash g7h8i9j Refactor: clean up code
保存后,Git 会将三个提交合并为一个,并让你编辑新的提交信息。
✅ 修改某次提交的日志
pick a1b2c3d Feat: add user login
reword d4e5f6g Fix: typo in login page # 修改这次提交的信息
pick g7h8i9j Refactor: clean up code
✅ 删除某次提交
pick a1b2c3d Feat: add user login
drop d4e5f6g Fix: typo in login page # 删除这个提交
pick g7h8i9j Refactor: clean up code
✅ 调整提交顺序
直接调整行顺序即可(但需注意依赖关系)。
✅ 拆分提交
使用 edit 暂停在某个提交,然后:
git reset HEAD~ # 撤销上次提交,保留改动在工作区
git add -p # 分批添加改动到暂存区
git commit -m "New commit A"
git commit -m "New commit B"
git rebase --continue
⚠️注意事项:
- 不要重写已推送的历史:如果这些提交已经推送到远程仓库,重写历史会导致冲突,需要强制推送(
git push --force-with-lease),但这会影响其他协作者。 - 冲突处理:在 rebase过程中可能会出现冲突,解决后使用:
如果想放弃 rebase:git add . git rebase --continuegit rebase --abort - 备份分支:不确定时先创建新分支备份:
git checkout -b backup-branch
如果你有具体需求(例如只想推送一笔提交),可以结合 git rebase -i + git push origin <commit>:refs/for/branch
内容由零声教学AI助手提供,问题来源于学员提问




