简介
想象一下,你正在写一个故事。情节发展到某个节点时,可能会走向两个不同的方向:英雄可以与恶龙战斗,也可以和恶龙成为朋友。你想把两个版本都写出来,看看哪个更好,但又不想弄乱主要手稿。
在 Git 中,分支正好可以实现这一点。它会创建一条并行的开发路线,让你能够安全地进行尝试。分支是 Git 最重要的概念之一,因为它可以低成本、轻松地隔离工作。
在 Git 中,分支并不是项目的完整副本,而主要是指向一系列提交的可移动指针。因此,创建分支既快速又轻量。
- 开发功能:在独立空间中构建新的登录系统。
- 进行实验:尝试新的设计方案,而不会破坏当前网站。
- 修复错误:在隔离环境中修复严重错误。
在本实验中,你将创建一条并行时间线(分支),在其中进行修改,然后切回主时间线,验证你的实验没有影响原始项目。
创建功能分支
默认情况下,每个 Git 仓库都会从一个主分支开始,这个分支通常名为 master 或 main。你可以把它看作「主时间线」——项目的正式稳定版本。
如果你想开发新功能(例如登录页面),又不希望影响主项目的稳定性,就需要创建一个新分支。
检查当前所在的分支:
git branch
输出:
* master
* 表示你当前位于 master 时间线。
这个标记会显示当前的分支上下文。在 Git 中,许多命令都相对于 HEAD 当前指向的分支执行,因此了解自己当前所在的位置非常重要。
创建名为 feature_login 的新分支:
git branch feature_login
现在,你已经创建了一条新的时间线!不过,你还没有切换到这条时间线。
这体现了 Git 中一个重要的区别:创建分支和切换到分支是两个独立的操作。分支可以存在,但不一定是你当前的工作上下文。
验证分支是否创建成功:
git branch
输出:
feature_login
* master
feature_login 分支已经存在,但 * 表明你仍然位于 master 分支。
切换到新分支
仅创建时间线还不够,你还需要切换到这条时间线。用于切换分支的命令是 git checkout。
切换到新分支:
git checkout feature_login
输出:
Switched to branch 'feature_login'
验证是否已完成切换:
git branch
输出:
* feature_login
master
星号(*)已经移动了!现在,你正在 feature_login 时间线中工作。接下来所做的任何修改都只会发生在这条时间线上。
更准确地说,现在创建的新提交会推进 feature_login,而不会推进 master。两个分支仍然共享分叉点之前的历史记录。
在功能分支中工作
现在你已经进入安全的实验空间,可以开始编写代码了。我们将为「登录功能」创建一个脚本。
创建名为 login.sh 的文件:
echo "echo 'Logging in...'" > login.sh
验证该文件是否存在于当前目录:
ls
你应该能看到 README.md(从 master 继承而来)和新创建的 login.sh。
此时,login.sh 只是磁盘上的一个文件。要正式将它保存到该分支的历史记录中,还需要提交它。
这也进一步说明了分支的概念:文件会出现在工作树中,但只有在该分支上创建提交后,分支历史才会发生变化。
将修改提交到分支
现在保存你的工作。记住 Git 的标准工作流程:初始化 -> 暂存 -> 提交。
查看状态:
git status
login.sh 的状态是 Untracked(未跟踪)。
将文件加入暂存区:
git add login.sh
将文件提交到 feature_login 的历史记录中:
git commit -m "Add login feature script"
输出:
[feature_login 8a2b3c] Add login feature script
现在,这项修改已经被永久记录,但仅记录在 feature_login 时间线中。
分支之所以有用,正是因为它提供了这种隔离。你可以在分支中开发、测试或进行实验,而不必推进主分支,直到准备就绪为止。
验证分支隔离
现在到了验证结果的关键时刻。我们声称 feature_login 与 master 是相互独立的环境。切回 master,验证这一点。
切换回 master 分支:
git checkout master
输出:
Switched to branch 'master'
查看文件:
ls
login.sh 在哪里?它消失了!
这正是我们想要的结果。login.sh 文件不存在于 master 时间线中。你的实验已经被安全地隔离。
要确认它并没有永久丢失,请切回功能分支:
git checkout feature_login
ls
文件又出现了!当你在不同时间线之间切换时,Git 会立即替换目录中的文件。
总结
在本实验中,你学习了分支的作用:
- 安全性:你可以在独立分支(
feature_login)中构建新功能,而不必冒险修改主代码(master)。 - 上下文切换:你使用
git checkout在这些并行时间线之间切换。 - 隔离性:你验证了在一个分支中提交的修改不会出现在另一个分支中。
专业团队正是这样工作的。开发者会为每个新功能或错误修复创建分支,从而保持主代码库整洁、稳定。



