Git Rebase
最后更新
git rebase 移动你分支上的提交,让它们在另一个分支之上重放,得到一条笔直的线性历史,而不是一个合并提交。交互式变基(-i)更进一步,可以压缩、重新排序、编辑或删除提交。由于变基会改写提交,只对还没有分享出去的工作使用它。
在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。
语法
| 命令 | 作用 |
|---|---|
git rebase main | 把你的提交重放到 main 之上 |
git rebase -i HEAD~3 | 交互式编辑最近 3 个提交 |
git rebase --onto main old new | 把一段范围内的提交移到 main 上 |
git rebase --continue | 解决冲突后继续变基 |
git rebase --abort | 取消变基,恢复分支原状 |
git pull --rebase | 拉取时用变基代替合并 |
交互式变基关键字
在 -i 打开的编辑器中,把 pick 改成下面的某个关键字。
| 关键字 | 作用 |
|---|---|
pick | 保留该提交 |
reword | 保留该提交,修改提交信息 |
squash | 并入上一个提交,合并提交信息 |
fixup | 并入上一个提交,丢弃本条信息 |
drop | 彻底删除该提交 |
git rebase 常见问题
git rebase 是做什么的?
它取出当前分支上的提交,逐个重放到另一个分支之上,就好像你是从那个分支的最新提交开始工作的一样。结果是一条没有合并提交的线性历史。在这个过程中,提交会被改写(获得新的哈希值)。
什么是交互式变基?
git rebase -i <base> 会打开一个编辑器,列出 <base> 之后的所有提交,你可以在里面调整它们的顺序,用 squash 把几个提交合成一个,用 reword 修改提交信息,用 edit 编辑某个提交,或用 drop 删除它。在分享之前清理一串杂乱的提交,主要就靠它。变基的黄金法则是什么?
变基遇到冲突时怎么处理或取消?
变基因冲突停下时,先解决文件中的冲突,对它们执行
git add,再运行 git rebase --continue。用 git rebase --skip 可以跳过当前提交,用 git rebase --abort 则完全取消变基,把分支恢复到变基开始之前的样子。可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行
git rebase,无需安装。Coddy 的免费互动 Git 课程也会一步步教你变基。