Menu
CoddyTech

Git Rebase

最后更新

git rebase 移动你分支上的提交,让它们在另一个分支之上重放,得到一条笔直的线性历史,而不是一个合并提交。交互式变基(-i)更进一步,可以压缩、重新排序、编辑或删除提交。由于变基会改写提交,只对还没有分享出去的工作使用它。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git rebase 把你分支上的提交作为新副本重放到 main 之上,留下一条笔直的线性历史。

语法

命令作用
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 删除它。在分享之前清理一串杂乱的提交,主要就靠它。
变基的黄金法则是什么?
永远不要对别人已经基于它开展工作的提交执行变基,通常就是已经推送到共享分支上的任何提交。因为 rebase 会改写提交,这样做会迫使其他人去处理分叉的历史。对本地尚未推送的提交可以放心变基;已经公开的提交请用 merge 或 revert。
变基遇到冲突时怎么处理或取消?
变基因冲突停下时,先解决文件中的冲突,对它们执行 git add,再运行 git rebase --continue。用 git rebase --skip 可以跳过当前提交,用 git rebase --abort 则完全取消变基,把分支恢复到变基开始之前的样子。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行 git rebase,无需安装。Coddy 的免费互动 Git 课程也会一步步教你变基。
Coddy 编程语言插图

在 Coddy 学习 Git

开始