Gitee从入门到精通:手把手教你用代码管理生活(3)

1 阅读9分钟

我们继续第3篇,关于分支的管理。在Git中,分支是一个非常重要的概念,它允许你在同一个项目中独立开发不同的功能,而不会相互干扰。让我们用“平行宇宙”的比喻来理解分支。

第3篇:分支:开发新功能的“平行宇宙”

🌌 场景引入

小白:“我想给我的知识星球网站换个颜色主题,但又怕改坏了现在的稳定版本,怎么办?” 爱好者:“这时候就需要开一个‘平行宇宙’——在分支里大胆尝试,成功了再合并到主宇宙,失败了就放弃这个宇宙,主宇宙丝毫不受影响!” 真实痛点:你有没有遇到过?

  • 想尝试一个新技术方案,但担心把现有代码搞乱
  • 同时开发两个功能,但它们进度不同,一个要提前上线
  • 修复一个紧急bug,但手头的新功能只做了一半

分支(Branch)就是解决这些问题的“平行宇宙制造机”!

📚 核心概念(比喻版)

什么是分支?

想象你在写一本小说:

  • 主分支(main/master) = 已发布的稳定版本
  • 功能分支 = 你正在写的新章节草稿
  • 每个人物分支 = 为不同人物写的番外篇

关键点:在分支上写草稿,写好了、满意了,再合并到主故事里。这样主故事永远是可读的完整故事。

为什么需要分支?

  • 安全实验:在新分支尝试新想法,不影响稳定版本
  • 并行开发:多人同时开发不同功能,互不干扰
  • 版本管理:同时维护软件的多个版本(如v1.0、v2.0)

分支的工作流程

主分支:A — B — C — F — G
功能分支: D — E

解释:在C点创建功能分支,然后在功能分支上做了D和E两个提交,最后把功能分支合并到主分支,产生F和G。

🚀 手把手教学:分支的基本操作

步骤1:查看当前分支

进入你的知识星球项目目录

cd ~/Desktop/my-knowledge-garden

查看当前分支

git branch

你会看到:

  • main

(或者可能是 "* master",取决于你初始化仓库时的默认分支名)

"*"表示你当前所在的分支。

步骤2:创建新分支

假设我们要为知识星球添加一个“暗黑模式”:

创建名为dark-mode的分支

git branch dark-mode

这相当于复制了当前的宇宙,创造了一个一模一样的平行宇宙。

步骤3:切换到新分支

切换到dark-mode分支

git checkout dark-mode

你会看到终端提示符可能变了,表示你已经进入了“暗黑模式宇宙”。

查看一下:

git branch

输出:

main

  • dark-mode

现在你在 "dark-mode"分支上了。

步骤4:在新分支上工作

在暗黑模式分支上修改一些文件:

创建一个暗黑模式的CSS文件

echo "body { background: #333; color: #fff; }" > dark-style.css

修改index.html,引入暗黑样式

echo '' >> index.html

查看状态

git status

步骤5:在新分支上提交

三连招

git add . git commit -m "feat: 添加暗黑模式样式" git push -u origin dark-mode # 第一次推送需要设置上游分支

注意:我们是在 "dark-mode"分支上提交,所以不会影响 "main"分支。

步骤6:切换回主分支看看

切换回主分支

git checkout main

神奇的事情发生了: "dark-style.css"文件不见了! "index.html"也没有暗黑样式的链接!

别担心,文件并没有丢失。因为你在主分支,而暗黑模式的修改是在 "dark-mode"分支上。这就是“平行宇宙”的魔力。

🔀 分支的合并:把平行宇宙的故事合并到主宇宙

当你觉得暗黑模式已经完善,可以合并到主分支了:

方法1:合并(Merge)

确保你在主分支

git checkout main

合并dark-mode分支

git merge dark-mode

你会看到类似输出:

Updating 1a2b3c4..5d6e7f8 Fast-forward dark-style.css | 1 + index.html | 1 + 2 files changed, 2 insertions(+) create mode 100644 dark-style.css

快进合并(Fast-forward):如果主分支没有新的提交,Git会直接把主分支指针移到功能分支的最新提交。

方法2:拉取请求(Pull Request)

在团队协作中,更常用的方式是通过Pull Request(PR)来合并分支。

  1. 把你的分支推送到远程: git push origin dark-mode
  2. 在Gitee上:
    • 进入你的仓库
    • 你会看到“有新的分支dark-mode,点击创建Pull Request”
    • 点击创建PR
    • 填写PR描述,讨论修改
    • 点击“合并”

小知识:在开源项目中,Pull Request不仅是合并工具,更是讨论、审查代码的地方。

🧪 应用到我们的“知识星球”项目

实际开发工作流示例

假设我们要为知识星球添加“标签分类”功能:

  1. 从主分支创建新分支 git checkout main git checkout -b feature/tags # 创建并切换到新分支
  2. 在新分支上开发

创建标签相关文件

echo "# 标签管理" > tags.md echo "// 标签功能" > tags.js

提交

git add . git commit -m "feat: 添加标签管理功能" git push -u origin feature/tags 3. 继续在主分支修复紧急bug git checkout main

修复bug

echo "修复了首页显示问题" > bugfix.txt

git add . git commit -m "fix: 修复首页显示问题" git push 4. 完成功能后,合并到主分支 git checkout main git merge feature/tags 5. 删除已合并的分支(可选)

删除本地分支

git branch -d feature/tags

删除远程分支

git push origin --delete feature/tags

分支命名规范

"main/master" - 主分支,稳定版本

"feature/xxx" - 功能分支,如 "feature/dark-mode"

"bugfix/xxx" - bug修复分支

"hotfix/xxx" - 紧急修复分支

"release/xxx" - 发布分支

🔧 高级分支技巧

快速创建并切换分支

一条命令替代两条

git checkout -b 新分支名

查看分支图

git log --oneline --graph --all

你会看到分支的树状图,非常直观。

解决合并冲突

当两个分支修改了同一文件的同一部分,合并时会产生冲突。

示例:

  1. 在主分支修改了 "index.html"的第10行
  2. 在功能分支也修改了 "index.html"的第10行
  3. 合并时Git不知道保留哪个,需要你手动解决

解决步骤:

合并时发生冲突

git merge feature-branch

查看冲突文件

git status

打开冲突文件,你会看到:

<<<<<<< HEAD

主分支的内容

=======

功能分支的内容

>>>>>>> feature-branch

手动修改,保留你想要的内容,删除标记

然后提交解决冲突

git add . git commit -m "解决合并冲突"

变基(Rebase)简介

变基是另一种整合分支的方法,让提交历史更线性。

git checkout feature-branch git rebase main

注意:变基会重写历史,不推荐新手在共享分支上使用。

❓ 常见问题与误区

Q1:应该创建多少分支?

看情况:

  • 个人小项目:一个主分支+功能分支
  • 团队项目:每人有各自的功能分支
  • 复杂项目:主分支+开发分支+功能分支+发布分支

Q2:分支名可以改吗?

重命名当前分支

git branch -m 新分支名

重命名其他分支

git branch -m 旧分支名 新分支名

Q3:切换分支时,有未提交的修改怎么办?

Git不允许直接切换,你可以:

  1. 提交修改
  2. 使用 "git stash"暂存修改
  3. 放弃修改

Q4:如何比较两个分支的差异?

git diff 分支1..分支2 git diff main..feature-branch

常见误区:

  • 误区:只在主分支上开发
    • 问题:不稳定代码影响主分支,无法并行开发
    • 正确:新功能都在独立分支开发
  • 误区:分支越多越好
    • 问题:分支太多难以管理
    • 正确:按需创建,及时合并删除
  • 误区:从不删除旧分支
    • 问题:分支列表混乱
    • 正确:合并后删除已合并的分支

📊 分支策略:Git Flow vs GitHub Flow

Git Flow(复杂但规范)

主分支(main) ────────┐ ↓ 开发分支(develop) ────┐ ↓ 功能分支(feature/) ─┐ ↓ 发布分支(release/)─┐ ↓ 热修复分支(hotfix/*)

适合:有固定发布周期、需要维护多个版本的大型项目。

GitHub Flow(简单直接)

主分支(main) ←─ 功能分支 ↑ | └─── Pull Request ──┘

适合:持续部署的Web应用、小型团队、个人项目。

你的知识星球用哪个?GitHub Flow就够了!

📝 今日收获总结

今天你掌握了Git的分支管理,拥有了“平行宇宙”操控能力:

✅ 理解了分支的概念——代码的平行宇宙

✅ 学会了创建/切换/合并分支——宇宙的基本操作

✅ 体验了分支的实际应用——在不影响主分支的情况下开发新功能

✅ 了解了分支策略——知道了Git Flow和GitHub Flow的区别

你的技能清单:

"git branch" - 查看分支

"git branch 分支名" - 创建分支

"git checkout 分支名" - 切换分支

"git checkout -b 分支名" - 创建并切换

"git merge 分支名" - 合并分支

"git branch -d 分支名" - 删除分支

🔮 下篇预告 & 思考题

下篇预告:《Issue:给代码"贴便利贴"》

分支让我们能并行开发,但如何管理这些开发任务呢?下一篇我们学习用Issue记录想法、bug、任务,让你的项目井井有条。 你将学到:

  • 什么是Issue?为什么要有Issue?
  • 如何创建、管理、关闭Issue?
  • Issue和分支如何配合使用?

今日思考题:

  1. 如果你要同时开发“用户登录”和“文章评论”两个功能,应该创建一个分支还是两个分支?为什么?
  2. 合并分支时,什么情况下会发生冲突?如何避免?

动手小任务:

  1. 在你的知识星球项目中:
    • 创建 "feature/about-page"分支
    • 在分支上完善 "about.html",添加更多个人介绍
    • 提交并推送到远程
    • 在Gitee上创建Pull Request
    • 合并到主分支
  2. 尝试解决一次合并冲突(可以故意制造冲突):
    • 在主分支修改 "index.html"
    • 在功能分支也修改同一行
    • 尝试合并,解决冲突

📖 延伸资源

  1. Git分支官方文档:"git-scm.com/book/zh/v2/…" (git-scm.com/book/zh/v2/…
  2. Git Flow工作流:"nvie.com/posts/a-suc…" (nvie.com/posts/a-suc…)
  3. GitHub Flow工作流:"guides.github.com/introductio…" (guides.github.com/introductio…)
  4. 交互式分支学习:"learngitbranching.js.org/" (learngitbranching.js.org/)

平行宇宙不是科幻,是每个Git用户的日常。 大胆创建分支,大胆尝试新想法,Git会保护你的主宇宙永远稳定。 记住:分支是你的安全沙盒,在这里你可以:

  • 尝试疯狂的想法
  • 重构糟糕的代码
  • 修复紧急的bug
  • 而不用担心破坏已有的成果

下一站,用Issue管理你的开发任务! 📋