Git详细教程(十一)分支管理-创建与合并分支

2018-01-19  本文已影响0人  无关风月oo

分支管理

其他版本控制系统如SVN等都有分支管理,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。

但Git的分支是与众不同的,无论创建、切换和删除分支,Git都能在瞬间完成。这得益于Git的设计原理十分巧妙,对于这一系列的操作而言,它只需要修改一下指针就能完成。这个我在另一系列教程-《Git机制解析》有详细解读,相信你理解之后会对Git的管理模式更清晰。

创建分支

创建分支前我们先使用git branch查看一下当前拥有的分支:

$ git branch
* master

结果显示我们当前只有一个master分支,这是我们最初在执行git init的时候Git 为我们创建默认的分支。前面的 *号代表了当前所指向的分支,也就是此处的HEAD:

image.png

在创建新的分之前我们先来看一下当前master分支中的内容:

$ ls
readme.txt
$ cat readme.txt
无关风月oo

现在我们来新建一个dev(即开发)分支并且切换到该分支:

$ git checkout -b dev
Switched to a new branch 'dev'

此处带上 -b 就相当于:

$ git branch dev  //创建分支
$ git checkout dev  //切换分支
Switched to branch 'dev'

然后我们再来查看一下当前的分支情况:

$ git branch
* dev
  master

结果显示现在有masterdev两个分支,* 号标记了当前所处的分支为 dev

然后我们来编辑并查看readme.txt:

$ cat readme.txt 
无关风月oo
分支测试

然后添加到stagecommit到版本库中:

$ git add readme.txt 
$ git commit -m 'add branch test'  
[master 6713cc6] add branch test
 1 file changed, 1 insertion(+)

接下来我们在切回到master分支上并查看刚刚修改的readme.txt文件:

$ git checkout master
Switched to branch 'master'
$ cat readme.txt 
无关风月oo

此时发现修改的内容不见了,还是原来的内容。这是怎么回事呢?
其实那是因为我们的修改与提交都是在dev上操作的,对master没有任何影响。当我们再切换回去的时候只是将HEAD指向master, dev还是呆在那。也就是干了这么件事情:

image.png

合并分支

现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

删除后,查看branch,就只剩下master分支了:

$ git branch
* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

小结:

1.git branch查看分支。
2.git branch dev创建dev分支。
3.git checkout dev切换到dev分支。
4.git checkout -b dev创建并切换到dev分支。
5.git merge devdev分支合并到当前(master)分支。
6.git branch -d dev删除dev分支。

上一篇 下一篇

猜你喜欢

热点阅读