git rebase 和 merge的区别
git rebase 和 merge都具有合并代码的功能,刚上手时,可能满头问号。比如git merge dev和git rebase dev实现了同样的功能,但是,rebase(变基)和 merge(合并)是两种不同的分支集成策略,核心区别在于提交历史的处理方式和适用场景。
特性
git merge 保留分支的原始提交历史
保留分叉结构(可能有多个合并节点)
在合并提交中一次性解决冲突
适用于公共分支协作(如主分支合并)
安全,不修改历史
git rebase将提交历史“复制”到目标分支,形成线性历史
生成线性历史(无分叉)
在每次提交迁移时逐个解决冲突
本地分支整理(如清理临时提交)
可能破坏公共提交历史(需谨慎使用)
原分支的提交哈希值会改变(历史被重写)
冲突解决流程对比
git merge 合并提交时一次性冲突
编辑冲突文件 → git add → git commit (必须解决冲突)
git rebase每个迁移的提交都可能触发冲突
编辑冲突文件 → git add → git rebase --continue
git rebase --abort 可放弃变基
rebase放弃变基
(如果变基过程中意识到操作有误(例如选择了错误的目标分支),使用此命令可以安全撤销所有临时改动,避免引入混乱的提交历史)
栗子
执行变基后出现冲突
git rebase master
发现冲突复杂,决定放弃
git rebase --abort --abort 仅影响本地仓库,不会修改远 程分支
解决了,继续
git rebase --continue
(变基前存在未提交的本地修改,建议先通过 git stash 暂存)
实践
公共分支使用 merge
主分支(如 main)合并时保留合并提交,避免历史重写导致团队协作混乱。
本地分支使用 rebase
本地开发时通过 git rebase 同步主分支更新,保持提交历史线性化。
黄金法则
禁止对已推送的公共分支执行 rebase(避免强制推送破坏他人代码)。
交互式变基(Interactive Rebase)
使用 git rebase -i HEAD~3 合并、编辑或重排提交,优化提交历史。
git merge:简单安全,适合保留完整开发历史和团队协作。
git rebase:历史更清晰,适合本地提交整理和代码同步。