核心原则(重要!)
✅ 正确理解
哪个分支需要【接收】合并内容,就切换到哪个分支!
不是看哪个分支需要"被合并出去",而是看哪个分支需要"接收内容"!
一、Git Merge 的本质逻辑
命令格式
bash
git merge <source-branch>
含义 :将 <source-branch> 合并到当前分支
关键点
当前分支 = 接收合并的分支(会被修改)
source-branch = 提供内容的分支(不会被修改)
二、具体示例说明
场景 1:将 b 分支合并到 a 分支
需求:a 分支要接收 b 分支的内容
操作:
1. 切换到 a 分支 ← 因为 a 是【接收方】
2. 执行 git merge b
命令行:
bash
git checkout a # 切换到接收方 a
git merge b # 将 b 合并进来
IDEA:
1. 右下角切换到 a 分支
2. 右键 → Git → Merge → 选择 b
理解:
- ✅ 当前在 a → 合并 b → a 分支会改变
- ✅ b 分支保持不变
场景 2:将 a 分支合并到 b 分支
需求:b 分支要接收 a 分支的内容
操作:
1. 切换到 b 分支 ← 因为 b 是【接收方】
2. 执行 git merge a
命令行:
bash
git checkout b # 切换到接收方 b
git merge a # 将 a 合并进来
IDEA:
1. 右下角切换到 b 分支
2. 右键 → Git → Merge → 选择 a
理解:
- ✅ 当前在 b → 合并 a → b 分支会改变
- ✅ a 分支保持不变
三、记忆技巧
方法 1:箭头法
想要:b → a(b 的内容给 a)
操作:
站在 a 上 → merge b
↑
接收方
方法 2:容器法
把 a 分支想象成一个容器
要往容器里倒入 b 分支的内容
操作:
1. 打开容器 a(切换到 a)
2. 倒入 b(merge b)
方法 3:公式法
切换到【目标分支】→ 合并【源分支】
目标分支 = 最终要包含所有内容的分支
源分支 = 提供内容的分支
四、对比理解
错误理解 ❌
"b 分支需要合并,所以切换到 b" ← 错误!
正确理解 ✅
"a 分支需要接收 b 的内容,所以切换到 a" ← 正确!
五、实际操作对比表
| 需求 | 切换到 | 执行操作 | 结果 |
|---|---|---|---|
| a 要接收 b 的内容 | a 分支 | git merge b |
a 分支改变,b 不变 |
| b 要接收 a 的内容 | b 分支 | git merge a |
b 分支改变,a 不变 |
| master 要接收 feature | master | git merge feature |
master 改变 |
| feature 要接收 master | feature | git merge master |
feature 改变 |
六、IDEA 中的验证方法
查看当前分支
右下角状态栏:Git: <当前分支名>
例如:
Git: a ← 表示当前在 a 分支
合并时的确认
右键 → Git → Merge...
弹窗显示:
┌─────────────────────────────┐
│ Merge into 'a' │ ← 明确告诉你要合并到 a
│ │
│ Select branch to merge: │
│ ( ) b │ ← 选择 b
│ ( ) master │
│ │
│ [Merge] [Cancel] │
└─────────────────────────────┘
意思:将 b 合并到 a
七、特殊情况说明
情况 1:双向同步
需求:a 和 b 要互相同步彼此的内容
操作:需要两次合并
1. 切换到 a → merge b(a 获得 b 的内容)
2. 切换到 b → merge a(b 获得 a 的内容)
结果:a 和 b 内容一致
情况 2:多分支合并到一个分支
需求:将 feature1、feature2 都合并到 master
操作:
1. 切换到 master
2. git merge feature1
3. git merge feature2
结果:master 包含了所有内容
八、图解说明
单向合并
合并前:
a: A1 → A2 → A3
b: B1 → B2 → B3
需求:将 b 合并到 a
操作:
git checkout a # 切换到 a
git merge b # 合并 b
合并后:
a: A1 → A2 → A3 → M (包含了 B 的内容)
↗
b: B1 → B2 → B3 # b 保持不变
双向合并
步骤 1:b → a
git checkout a
git merge b
a: A1 → A2 → A3 → M1
↗
b: B1 → B2 → B3
步骤 2:a → b
git checkout b
git merge a
a: A1 → A2 → A3 → M1
↗
b: B1 → B2 → B3 → M1 (快进合并)
结果:a 和 b 指向同一个提交
九、常见场景速查
| 你想做什么 | 切换到哪里 | 执行什么 |
|---|---|---|
| 把功能分支合并到主分支 | 主分支 | merge 功能分支 |
| 主分支更新同步到功能分支 | 功能分支 | merge 主分支 |
| 把 dev 合并到 master | master | merge dev |
| 把 master 合并到 dev | dev | merge master |
| 测试环境更新到生产 | 生产分支 | merge 测试分支 |
十、总结
核心答案
✅ 是的,必须切换到【接收合并】的分支上!
但要注意:
不是"哪个分支需要被合并"
而是"哪个分支需要接收内容"
记忆口诀
想让谁变化,就切到谁
想让 a 变化,就切到 a,然后 merge b
想让 b 变化,就切到 b,然后 merge a
实践建议
在 IDEA 中操作前:
1. 看右下角确认当前分支
2. 想清楚"谁要接收内容"
3. 确保在正确的分支上再操作
💡 简单来说:Git 的 merge 只会修改当前分支,不会修改被合并的分支!