合并Merge
Git 专区把独立工作线上的改动带回当前版本
feature/new-nav
main
$ git switch main && git merge feature/new-nav
分支的绿点合回主线,拧出一个紫色 merge commit。只有两边改了同一行才会冲突:手选一版、删干净标记、重新 commit。合完点开页面跑一遍才算真的合完。
什么时候用
- 目标分支没有新提交时,可以直接快进main
- 两边都有新提交时,可以创建合并提交保留分支关系main
- 冲突 = 两边改了同一行:Git 不敢替你选,把两版都摆出来<<<<<<< HEAD标题:小狸的主页=======标题:小狸的摄影主页>>>>>>> feature
- 解完冲突重新 add + commit:删掉标记、留好版本,才算合完手选一版→git add→git commit
什么时候不用
- 分支上没跑通就合回 main:坏代码直接污染主线分支上还白屏→ merge →main 也白了没跑通就合,坏代码污染主线
- 看到冲突标记两版全删:功能直接没了,先冷静下来读一遍
标题:小狸的主页标题:小狸的摄影主页两版全删了,功能直接没了 - 冲突标记没有清理完整就提交,代码会保留无效内容<<<<<<< HEAD
标题:小狸的主页标记没删干净,页面直接报错 - 合完不点开看一遍就 推送 Push:线上报错,用户先踩雷merge ✓→push ✓→线上报错
组成结构 · Anatomy
<<<<<<< HEAD
<h1>小狸的主页</h1>
=======
<h1>小狸的摄影主页</h1>
>>>>>>> feature/new-nav
1冲突开始标记<<<<<<< HEAD从这里开始是冲突区,HEAD 指你当前所在分支的版本
2你这边的版本Current Change当前分支上这行长什么样,通常是 main 主线的内容
3分隔线=======上下两个版本的分界,解冲突时要一起删掉
4对方分支的版本Incoming Change被合进来的那条分支上这行长什么样
5冲突结束标记>>>>>>> branch冲突区到此为止,标着内容来自哪条分支
常见变体 · Variants
快进合并Fast-forward
Updating a3f9c21..e7b2d48
分支只是领先,主线直接追上
合并存档Merge Commit
Merge made by the 'ort' strategy.
两边都有新存档,拧成一股
撤销合并merge --abort
git merge --abort
冲突解不动,先撤回合之前
典型使用场景
终端 git merge 合回主线
$ git switch main
Switched to branch 'main'
$ git merge feature/new-nav
Merge made by the 'ort' strategy.
index.html | 24 ++++++++++++++-----
1 file changed, 16 insertions(+), 8 deletions(-)
冲突文件里的标记
VS Code 冲突解决按钮
GitHub PR 合并按钮