资讯动态

Git 分支整合策略:Merge 与 Rebase

发布时间:2026/8/13 18:05:36 来源:尧图企业网站定制
一、merge和rebase 的主要区别项目MergeRebaseCherry-pick整合方式合并两个分支的历史将当前提交重新应用到最新master后面选择指定提交复制到当前分支提交历史保留分叉历史可能产生 Merge Commit更线性、整洁只引入选中的提交提交 ID原有提交 ID 不变提交被重写ID 会改变会生成新的提交 ID是否改写历史❌ 不会✅ 会❌ 原分支不会适用场景完整合并两个分支整理自己的分支、保持线性只需要某几个特定提交冲突处理可能需要手动解决可能需要手动解决可能需要手动解决核心理解“把两个历史合起来”“把我的提交重新排到最新代码后面”“只拿我需要的几个提交”二、图解假设当前分支结构如下A---B---C ← master远程最新 \ D---E ← feature基于旧 master 开发的功能1.Cherry-pick现在master只想要D 这个提交不想要整个 feature。git checkout master git cherry-pick D结果A---B---C---D ← master \ D---E ← feature注意这里是D而不是原来的D。虽然代码变化可能完全一样但 Git 会认为它是一个新的 commit因为它的 parent 不一样。2.rebase当执行 rebase 相关命令时git checkout feature git rebase master # 将 feature 分支“重新排列”到最新 master 分支后面分支结构会变成如下所示A---B---C ← master \ D---E ← featureD和 E 会被复制为新的提交 D、E所以它们的提交 ID 会变。现在的feature就像是刚刚基于C开始开发的一样。3.merge当执行 merge 相关命令时git checkout feature git merge master # 合并 master 分支到当前 feature 分支分支结构会变成如下所示A---B---C ← master \ \ D---E---M ← feature把master的最新提交C合进feature产生一个新的Merge Commit M三、汇总注意⚠️在哪个分支上操作修改的就是哪个分支初始状态 ──────────────────────────────────────────── A---B---C ← master远程最新 \ D---E ← feature基于旧 master 开发 1. Merge ──────────────────────────────────────────── 命令 git checkout feature git merge master 结果 A---B---C ← master \ \ D---E---M ← feature 说明 - 把 master 的最新提交 C 合进 feature产生一个新的 Merge Commit M - feature 合并 master - 新增 Merge CommitM - master 仍然指向 C - D、E 的 Commit ID 不变 2. Rebase ──────────────────────────────────────────── 命令 git checkout feature git rebase master 结果 A---B---C ← master \ D---E ← feature 说明 - feature 的 D、E 重新应用到 C 后面 - 生成新的 D、E - D、E 的 Commit ID 改变 - master 仍然指向 C 3. Cherry-pick ──────────────────────────────────────────── 假设只想把 D 提交带到 master 命令 git checkout master git cherry-pick D 结果 A---B---C---D ← master \ D---E ← feature 说明 - 只复制 D 的修改 - 在 master 上生成新的 D - 原来的 D 不变 - E 不会被带过来 - master 最终指向 D 核心区别 ──────────────────────────────────────────── Merge → 把两个分支的历史合起来 A---B---C ← master \ \ D---E---M ← feature Rebase → 把自己的提交重新排到最新 master 后面 A---B---C ← master \ D---E ← feature Cherry-pick → 只复制指定的提交 A---B---C---D ← master \ D---E ← feature同类问题面试官说说对git pull 和 git fetch 的理解有什么区别

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价