Menu
CoddyTech

Git Merge

最后更新

git merge 把另一个分支上的提交并入当前分支。如果当前分支没有分叉,Git 会执行快进(fast-forward),只是把分支指针往前移。如果两个分支都有新提交,Git 会创建一个合并提交,把两段历史连在一起。和 rebase 不同,merge 会原样保留两个分支的历史。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git merge 用一个合并提交把两段历史连在一起,两个分支都保留各自原来的提交。

语法

命令作用
git merge feature把 feature 合并到当前分支
git merge --no-ff feature始终创建合并提交
git merge --ff-only feature只有能快进时才合并
git merge --squash feature把该分支的所有提交压缩成一个
git merge --abort取消有冲突的合并

快进合并与合并提交

情况Fast-forwardMerge commit (--no-ff)
会创建新提交否是
保留分支的记录否是
发生在当前分支没有分叉时两个分支都有新提交时

解决合并冲突

当两个分支改动了相同的行,Git 会暂停合并。

步骤命令结果
1编辑有冲突的文件选出正确的内容,删除冲突标记
2git add <file>标记冲突已解决
3git commit完成合并

git merge 常见问题

Git 怎么把一个分支合并到另一个分支?
先切换到要合并进去的目标分支(例如 git switch main),再运行 git merge feature。Git 会把 feature 上的提交并入 main:能快进时直接快进,两个分支都有分叉时则创建一个合并提交。
快进合并和合并提交有什么区别?
如果另一个分支分出去之后,你的当前分支没有再前进,就会发生快进:Git 只是把指针往前挪,不产生新提交。如果两个分支都有新提交,Git 会创建一个合并提交,把两段历史连起来。用 --no-ff 可以强制总是创建合并提交,用 --ff-only 则要求必须能快进。
怎么解决合并冲突?
合并出现冲突时,Git 会在相关文件里用 <<<<<<<、======= 和 >>>>>>> 标出冲突的部分。逐个编辑文件,保留正确的内容并删除这些标记,然后对解决好的文件执行 git add,再用 git commit 完成合并。
怎么撤销或中止一次合并?
如果合并还在进行中(冲突尚未解决),运行 git merge --abort 即可取消,并恢复到合并前的状态。如果合并已经在本地完成,git reset --hard ORIG_HEAD 会把分支退回合并前的位置(和 HEAD~1 不同,它在快进合并之后也能正确工作,但会丢弃尚未提交的改动)。如果合并已经推送,请使用 git revert -m 1 <merge-hash>。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行 git merge,无需安装。Coddy 的免费互动 Git 课程也会一步步教你合并分支和解决冲突。
Coddy 编程语言插图

在 Coddy 学习 Git

开始