Git 分支管理完全指南
Git 的杀手级功能之一就是分支。如果把代码库比作时间线,主分支(master)就是那条主线。而分支就像是平行宇宙,允许你在独立的环境中开发新功能或修复 Bug,互不干扰。
理解分支概念
每次提交,Git 都会把修改串成一条时间线。在 Git 里,这个分支叫主分支,即 master 分支。HEAD 严格来说不是指向提交,而是指向当前分支,比如 master。所以 HEAD 指向的就是你当前所在的工作位置。
查看当前的版本库结构,可以看到 .git/HEAD 文件内容通常是指向 refs/heads/master,而 refs/heads/master 则存储着当前提交的哈希值。
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
5476bdeb12510f7cd72ac4766db7988925ebd302
创建与切换分支
Git 支持我们查看或创建其他分支。这里我们来创建自己的第一个分支 dev,对应的命令为:
$ git branch # 查看当前本地所有分支
* master
$ git branch dev # 新建分支 dev
$ git branch
* master
dev
当我们创建新的分支后,Git 新建了一个指针叫 dev,表示当前 HEAD 指向的分支是 master 分支。目前 dev 和 master 指向同一个修改点。
那如何切换到 dev 分支下进行开发呢?使用 git checkout 命令即可完成切换:
$ git checkout dev
Switched to branch 'dev'
$ git branch
* dev
master
$ cat .git/HEAD
ref: refs/heads/dev
我们发现 HEAD 已经指向了 dev,表示我们已经成功切换到了 dev 上。接下来,在 dev 分支下修改文件,新增一行内容,并进行一次提交操作:
$ vim ReadMe
# 写入新内容...
$ git add .
$ git commit -m "modify ReadMe"
[dev 3740dce] modify ReadMe
1 file changed, 1 insertion(+)
现在,dev 分支的工作完成,我们就可以切换回 master 分支:
$ git checkout master
Switched to branch 'master'
$ cat ReadMe
# 此时看不到 dev 分支新增的内容
切换回 master 分支后,发现 ReadMe 文件中新增的内容不见了!这是因为我们在 dev 分支上提交了,而 master 分支此刻的提交点并没有变。当切换到 master 分支之时,HEAD 就指向了 master,当然看不到 dev 上的提交了。
合并分支
为了在 master 主分支上能看到新的提交,就需要将 dev 分支合并到 master 分支:
$ git checkout master
$ git merge dev
Updating 16623e1..3740dce Fast-forward
ReadMe | 1 +
1 file changed, 1 insertion(+)
git merge 命令用于合并指定分支到当前分支。合并后,master 就能看到 dev 分支提交的内容了。
这里的 Fast-forward 代表'快进模式':也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。当然,也不是每次合并都能 Fast-forward,后面会讲其他方式的合并。


