备注:
本文转载参考于廖雪峰老师的博客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
分支都会向前移动一步,随着不断的提交,master分支的线也越来越长。
当我们创建新的分支,比如dev
分支,Git新建一个指针叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示当前分支在dev
上。
Git创建分支很快,因为Git只增加一个dev
指针,同时修改HEAD
的指向,工作区的文件都没有任何变化。
现在对工作区的修改和提交就针对dev
分支,比如新提交之后,dev
指针往前移动,而master
指针不变
当我们在dev
上的工作完成了,就可以把dev
合并到master
上。
Git的合并很简单,就是直接把master
指向dev
的当前提交,这就完成了合并。
Git合并分支也很快,仅仅是改改指针,工作区内容不变。
合并完分之后,如果删除dev分支只要把dev指针删除就可以
只剩下一条master分支
创建分支。
- 创建
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
删除后,查看branch
,dev2
分支已经没有了。
Git创建、合并和删除分支都非常快,所以Git鼓励使用分支完成某个任务,合并后再删除分支,效率高并且安全。