git分支管理

备注:

本文转载参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

知识点

  • 分支可以并行的管理版本,协同合作编写代码,在分支上完成工作,然后合并分支。

  • 查看分支和当前分支:git branch

  • 创建分支git branch <name>

  • 切换分支git checkout <name>

  • 创建并切换分支git checkout -b <name>

  • 合并指定分支到当前分支,git merge <name>

  • 删除分支git branch -d <name>

分支管理

分支类似于平行的多个支线。

分支的作用:比如多人协作开发中,你开发的功能需要两周完成,第一周还没写完,如果提交,由于代码不完整,提交可能会导致别人不能干活,但是如果等代码全部写完再提交,又有丢失的风险。

借助分支,你可以创建一个属于自己的分支,多个人各自在自己的分支上正常工作,互不影响,等到开发完成后,在一次性合并到原来的分支上,保证了安全、高效、协同、互补影响。

Git分支的创建、切换、删除非常快,和文件多少无关。

创建与合并分支

版本回退中,Git的版本管理是将每次提交串成一条时间出现,这条时间线就是一个分支。

目前创建的Git仓库只有一个分支——主分支,即master分支,

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

开始,master 分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支和当前分支的提交点。

master分支和head和提交

每次提交,master分支都会向前移动一步,随着不断的提交,master分支的线也越来越长。

当我们创建新的分支,比如dev分支,Git新建一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。

新dev分支和head和提交

Git创建分支很快,因为Git只增加一个dev指针,同时修改HEAD的指向,工作区的文件都没有任何变化。

现在对工作区的修改和提交就针对dev分支,比如新提交之后,dev指针往前移动,而master指针不变

新dev分支和head和提交2

当我们在dev上的工作完成了,就可以把dev合并到master上。

Git的合并很简单,就是直接把master指向dev的当前提交,这就完成了合并。

dev分支和master合并

Git合并分支也很快,仅仅是改改指针,工作区内容不变。

合并完分之后,如果删除dev分支只要把dev指针删除就可以

只剩下一条master分支

分支和master合并后删除dev分支

创建分支和合并分支。

  • 创建dev分支,并切换到dev分支
$ git checkout -b dev
切换到一个新分支 'dev'

git checkout -b xx表示创建分支并切换。

  • 分步骤创建并切换分支dev2。如下
$ git branch dev2
$ git checkout dev2
切换到分支 'dev2'
  • git branch查看当前分支
$ git branch
  dev
* dev2
  master

git branch列出所有分支,当前分支前面有一个*号。

  • 现在可以在dev2分支上正常提交。如修改readme.txt文件。然后查看Git状态
$ git status
位于分支 dev2
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

提示当前分支位于dev2上,并且工作区readme.txt修改

  • 分支提交
$ git add readme.txt
$ git commit -m"modify readme.txt at branch"
[dev2 03d07d2] modify readme.txt at branch
 1 file changed, 1 insertion(+)

如上,在当前分支dev2上完成了提交。

  • dev2分支上提交完,切回master分支:
$ git checkout master
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
liu@liu-virtual-machine:~/gitTest$ cat readme.txt

`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi

查看可以看到,readme.txt文件保持和修改前的一致。

  • 切换到dev2分支,可以看到dev2分支上内容为之前最新修改内容
$ git checkout dev2
切换到分支 'dev2'
$ cat readme.txt

`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
create two new branch
  • dev2分支内容合并到master分支(当前分支为master
$ git merge dev2
更新 036ced2..03d07d2
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

此时查看readme.txt内容,已经和dev2一样

git merge命令用于合并指定分支到当前分支。

注意,上面合并时提示Fast-forward,Git指示本次合并是“快进模式”,即把master指向dev2的当前提交,所以速度很快。

  • 删除dev2分支,合并完成后就可以放心的删除dev2分支了。
$ git branch -d dev2
已删除分支 dev2(曾为 03d07d2)。
$ git branch
  dev
* master

删除后,查看branchdev2分支已经没有了。

Git创建、合并和删除分支都非常快,所以Git鼓励使用分支完成某个任务,合并后再删除分支,效率高并且安全。