如何把本地分支 rebase 到最新的远程 main
同步主分支最新代码到功能分支:git fetch origin 后 git rebase origin/main(在功能分支上执行),冲突逐个解决后 git rebase --continue。已推送过的分支 rebase 后需 --force-with-lease 强推。
两步:先 git fetch origin 拿到远程最新,然后在你的功能分支上 git rebase origin/main——你的提交会被"搬"到 main 最新提交之后,历史保持线性。冲突逐个解决,git rebase --continue 继续。
完整流程
git checkout feature-x
git fetch origin
git rebase origin/main
# 有冲突时:
# 1. 编辑冲突文件,解决标记
# 2. git add <文件>
# 3. git rebase --continue(放弃用 --abort)
git push --force-with-lease # 若该分支之前推送过
rebase vs merge 的选择
| rebase origin/main | merge origin/main | |
|---|---|---|
| 历史 | 线性干净 | 多一个合并提交 |
| 提交哈希 | 重写 | 不变 |
| 已推送分支 | 需强推 | 直接 push |
| 适用 | 个人功能分支 | 共享/长期分支 |
防患于未然
- 功能分支生命周期短一点,rebase 冲突就少;
- 每天开工前 rebase 一次,小步同步好过攒一周大合;
- 不确定时
git branch backup先备份再 rebase。
常见问题(FAQ)
Q:rebase 到一半后悔了?
git rebase --abort 完全回到 rebase 前的状态,无副作用。
Q:同一个冲突在多个提交里反复出现?
启用 rerere(git config --global rerere.enabled true),Git 记住你的冲突解法,相同冲突自动应用。
Q:强推后同事的本地分支怎么办?
他们 git fetch 后 git reset --hard origin/feature-x 对齐。所以共享分支别 rebase,用 merge。