PC TOOLS

EP04. “分支(Branch)、合并(Merge)与解决冲突”

首页 › PC 工具 › Developer Tools · Git & GitHub · EP04
约 9 分钟· #EP04#Git & GitHub
🔒 登录后可标记已读
  • 想试一个新设计,又怕改坏正在运作的网站?开一个分支去试,试失败了整条分支丢掉就好,main 完全不受影响
  • 分支在 Git 里非常「便宜」:开一条新分支几乎不花时间和空间,所以习惯是每做一件事就开一条分支
  • 现在切换分支用 git switch,比旧的 git checkout 更直白、不容易误操作
  • 两条分支改到同一个文件的同一行时会出现冲突(conflict),看懂那几个 <<<<<<< 符号就不可怕

重点内容


分支是什么

gitGraph
    commit id: "初始版本"
    commit id: "关于我们页面"
    branch new-header
    checkout new-header
    commit id: "新版页首"
    commit id: "页首手机版"
    checkout main
    commit id: "修正错字"
    merge new-header
  • main:主线,通常代表「正在运作、可以上线」的版本
  • 功能分支(例如 new-header):从 main 分出去,专心做一件事,做好再合并回来
  • HEAD:指向你「现在所在」的分支,git status 第一行 On branch main 就是 HEAD 的位置

分支常用指令

指令用途
git branch列出本地所有分支,* 标记目前所在分支
git branch new-header建立新分支(但不会切过去)
git switch new-header切换到该分支
git switch -c new-header建立并切换,最常用
git switch main切回主线
git branch -d new-header删除已合并的分支
git branch -D new-header强制删除还没合并的分支(改动会丢失)
git checkout -b new-header旧写法,等于 git switch -c,网上旧教程常见

📌 切换分支前先 commit(或 stash)手上的改动,不然 Git 可能拒绝切换,或把没存的改动带到另一条分支。


合并:git merge

规则:先切到「要接收改动」的分支,再 merge 另一条进来。

git switch main            # 先回到要接收改动的 main
git merge new-header       # 把 new-header 的改动并进 main
git branch -d new-header   # 合并完,功能分支可以删了
合并类型什么时候发生结果
Fast-forward分出去之后 main 没有新 commitmain 直接往前移,不会多出合并 commit
三方合并(3-way merge)两边都有新 commitGit 自动产生一个「合并 commit」

解决合并冲突

两条分支都改了同一个文件的同一段,Git 不知道该听谁的,就会停下来:

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

打开 index.html,会看到 Git 插入的标记:

<<<<<<< HEAD
<p>联络电话:03-1234 5678</p>
=======
<p>联络电话:012-345 6789</p>
>>>>>>> new-header
标记意思
<<<<<<< HEAD 到 =======目前分支(main)的版本
======= 到 >>>>>>> new-header要合并进来的分支的版本

解决步骤:

  1. 决定要留哪个版本(或两个都留、或改成新的写法)
  2. 删掉全部 <<<<<<<、=======、>>>>>>> 标记行
  3. 存档后 git add index.html 标记为已解决
  4. git commit 完成合并

💡 VS Code 打开冲突文件时,上方会出现 Accept Current Change / Accept Incoming Change / Accept Both Changes 按钮,点一下就帮你处理标记,比手动删方便。

⚠️ 不知道怎么处理、想放弃这次合并:git merge --abort,会回到合并前的状态。


分支命名建议

用途例子
新功能feature/whatsapp-button
修 bugfix/mobile-menu
临时实验test/new-font
  • 全小写、用 - 连接,不要有空格
  • 看名字就知道这条分支在做什么

学完你会

  • ✅ 用 git switch -c 开新分支、git switch 切换
  • ✅ 用 git merge 把功能分支合并回 main
  • ✅ 看懂冲突标记并手动解决

常见错误

  • ❌ 直接在 main 上做实验性改动:改坏了整条主线都受影响,要先开分支。
  • ❌ 在功能分支上执行 git merge main 以为是把功能并进 main:方向反了,要先 git switch main 再 merge 功能分支。
  • ❌ 解决冲突时忘了删 <<<<<<< 标记:标记会跟着 commit 进去,网站上直接显示出这些符号。
  • ❌ 用 -D 删分支前没确认:还没合并的改动会一起丢掉。
  • ❌ 一条分支做了一个月才合并:跟 main 差太远,冲突会很多,分支要短、要常合并。

Sources

官方文档:

  1. Pro Git 3.1 Branches in a Nutshell - git-scm.com
  2. Pro Git 3.2 Basic Branching and Merging - git-scm.com
  3. git-switch Documentation - git-scm.com
  4. Resolving a merge conflict using the command line - GitHub Docs
📝 测验一下共 6 题