Fast-Forward 合并
Fast-Forward(快进合并)是 Git 的默认合并策略,适用于目标分支无新提交的情况。
什么是快进合并
当目标分支没有新的提交时,Git 直接将目标分支指针移动到源分支位置,无需创建合并提交。
合并过程
Bash
合并前:
main: A → B → C
↑
feature: A → B → C → D → E
合并后(快进):
main: A → B → C → D → E
↑
feature: A → B → C → D → E
快进合并示例
Bash
# 在 main 分支合并 feature
git checkout main
git merge feature
# 输出
Updating a1b2c3..e4f5g6
Fast-forward
src/main.go | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
快进合并条件
| 条件 | 说明 |
|---|---|
| 目标分支无新提交 | 合并点之后无任何提交 |
| 无冲突 | 两分支修改不同文件或同一文件不同位置 |
| 线性历史 | 分支从目标分支分出后未分叉 |
快进合并特点
| 优点 | 缺点 |
|---|---|
| 无合并提交,历史简洁 | 丢失分支信息 |
| 合并速度快 | 无法追溯分支历史 |
| 无需处理冲突 | 看不出分支的存在 |
控制快进合并
Bash
# 允许快进合并(默认)
git merge feature
# 禁止快进,创建合并提交
git merge --no-ff feature
# 只允许快进合并(不允许普通合并)
git merge --ff-only feature
快进 vs 普通合并
text
# 快进合并历史
A → B → C → D → E
(看不到 feature 分支的存在)
# 普通合并历史(--no-ff)
A → B → C → M
↗
D → E
(保留了分支结构)
功能分支合并建议用 --no-ff,保留分支历史便于追溯。
要点总结
- 快进合适合目标分支无新提交的情况
- 直接移动指针,不创建合并提交
- 历史简洁但丢失分支信息
--no-ff禁止快进,保留分支历史--ff-only只允许快进合并
📝 发现内容有误?点击此处直接编辑