git变基
“Git 变基(rebase)”是 Git 中一个非常强大但又容易搞混的功能。它的作用是:把一个分支的更改“迁移”到另一个分支上,相当于重新整理提交历史。它常用于保持 Git 提交历史清晰、线性。
一句话理解:
变基(rebase)是“把你的提交移到别人的提交后面”。
一些常见场景
场景 1:本地分支落后于主分支
比如你在 feature
分支上开发功能,远程的 main
分支已经有新提交了:
A---B---C main (远程)
\
D---E feature (本地)
你想把 feature
分支的提交整理到最新的 main
分支之后。
使用 rebase:
bash
# 切换到 feature 分支
git checkout feature
# 把 feature 分支基于 main 最新提交
git rebase main
变基之后的结构:
A---B---C main
\
D'---E' feature
注意:D
和 E
变成了新的提交 D'
和 E'
(即 提交被重写了)。
和 merge 的区别
假设你用 git merge main
,结构会变成这样:
A---B---C main
\ \
D---E---M feature
merge
会产生一个 额外的合并提交 M。rebase
会让提交历史更“线性”,更像是你直接从最新main
开始开发一样。
场景 2:多个开发者合作时使用 rebase
假设你在本地提交了一些东西,准备推送,但远程已经有新的提交了。你可以先拉取并变基:
bash
git pull --rebase
这会把远程的新提交放在你前面,保持提交历史整洁。
常用 rebase 命令总结
命令 | 作用 |
---|---|
git rebase main | 把当前分支的提交变基到 main 后 |
git pull --rebase | 拉取远程提交并变基 |
git rebase -i HEAD~3 | 交互式变基,整理最近 3 次提交(如 squash、reword) |
git rebase --abort | 放弃变基过程 |
git rebase --continue | 解决冲突后继续变基 |
⚠️ 注意事项
- 变基会“改写历史”,不要对已推送的共享分支使用 rebase,否则其他人会出现冲突。
- 适合用于 本地开发分支整理提交记录 或 在推送之前使用。