首页 > 技术文章 > 四、Git分支管理

kunpengv5 2017-11-13 20:37 原文

分支与HEAD

版本回退过程中,每次提交串成的时间线,就是一个分支,即主分支,master分支。

 

HEAD严格来说,指向的是master,而master指向提交。HEAD指向的就是当前分支。
创建一个新的分支、合并分支时,Git之所以这么快,主要原因就在于,移动的只是HEAD的指向。

创建与合并分支

查看当前分支,显示当前分支只有master主分支
$ git branch   #查看当前分支
* master    #*表示当前所在的分支
创建并切换到一个新的分支
   注意:这里的checkout和之前回退的checkout区别
$ git checkout -b dev
#-b参数表示:创建并切换到一个新分支 'dev'
或者
$ git branch <name>  #创建一个分支

切换分支

$ git checkout <name>

创建+切换分支:

$ git checkout -b <name>

合并某分支到当前分支:需要切换到主分支,然后执行merge命令

$ git merge <name>

删除分支  //一般用到较少吧

$ git branch -d <name>

解决冲突

  实际工作中遇到冲突的可能性还是比较大的,如果主分支和其他分支,都对一行代码或者文字,进行了修改提交。那么在合并时,就是出现冲突。如下:
提示自动合并失败,需要手动解决冲突,此时查看该文件,会有如上对比
  • <<<<<<为master分支的内容
  • >>>>>>为feature1分支的内容
  • 中间以=====进行分割
 此时分支的解决办法,就是直接打开冲突文件修改后git add 并且commit,现在分支变为如下状态:

 

也可以通过如下方式查看变化轨迹

最后,删除feature1分支

$ git branch -d feature1 
已删除分支 feature1(曾为 491ec71)。

分支管理策略

通常合并分支,Git默认使用fast forward模式,但是这种模式,删除分之后,会丢掉分支信息
强制禁用fast forward模式,Git就会在merge时生成一个新的commit。
$ git merge --no-ff -m "merge with no-ff" dev

合并后,我们用git log看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
...
分支策略     干货!!!
实际开发中,我们应该按照几个基本原则进行分支管理
  • master分支非常稳定,仅用来发布稳定版本,平时不在上面干活
  • 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
  • 每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了
廖总教程里有一个仁兄的回复,很有意义,截图如下:

 

 

 

 

推荐阅读