合并与冲突解决
约 640 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Git › 分支与合并(在新窗口打开) › 合并与冲突解决
git merge
将其他分支的变更合并到当前分支:
# 切换到目标分支,合并来源分支
git switch main
git merge feature-login两种合并类型
快进合并(Fast-Forward)
当前分支没有新提交,直接将指针向前移动:
git switch main
git merge feature-login
# Updating a1b2c3d..d4e5f6f
# Fast-forward三方合并(Three-Way Merge)
两个分支都有新提交,生成一个合并提交:
git switch main
git merge feature-login
# Merge made by the 'ort' strategy.合并冲突
当两个分支修改了同一文件的同一部分,Git 无法自动合并:
# 冲突文件内容示例(vim 编辑后会显示)
<<<<<<< HEAD
当前分支的内容
=======
合并过来的分支的内容
>>>>>>> feature-login解决冲突
# 1. 查看冲突文件
git status
# both modified: index.html
# 2. 手动编辑解决冲突(删除标记)
# 3. 标记为已解决
git add index.html
# 4. 完成合并
git commit
# 5. 如果不想合并了
git merge --abortmergetool
使用图形化工具解决冲突:
git mergetool配置合并工具:
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd "code --wait --merge \$REMOTE \$LOCAL \$BASE \$MERGED"合并策略
| 策略 | 说明 |
|---|---|
ort | 默认策略,递归合并(新版本替代了 old recursive) |
ours | 保留当前分支内容,丢弃合并分支的变更 |
resolve | 只使用一个共同祖先(不推荐) |
octopus | 同时合并多个分支 |
# 使用指定策略
git merge -s ours feature-login合并 vs rebase
| 对比 | merge | rebase |
|---|---|---|
| 历史 | 保留分支拓扑 | 线性历史 |
| 冲突处理 | 一次解决 | 逐条提交解决 |
| 适用 | 公共分支、保留上下文 | 私有分支、整洁历史 |
小结
- 快进合并:当前分支没有新提交,只是指针前移。
- 三方合并:两个分支都有新提交,生成合并提交。
- 冲突标记
<<<<<<</=======/>>>>>>>,手动编辑后git add标记已解决。 git merge --abort放弃合并。- 合并保留分支拓扑,rebase 产生线性历史。
