Git分支创建与合并
分支管理是Git支持多人协作和版本控制的关键,参照廖雪峰对Git的介绍,对真实开发环境中Git的使用结合实践进行梳理。
|
摘自:廖雪峰的官方网站 在实际开发中,我们应该按照几个基本原则进行分支管理: 首先, 那在哪干活呢?干活都在 你和你的小伙伴们每个人都在 所以,团队合作的分支看起来就像这样:
|
在看具体实践前,需要了解一些理论概念,参考创建与合并分支:
(1)HEAD指针与分支间的关系:

(2)分支合并的时候,默认采用Fast Forward模式,可称为“快进合并”,即将master直接指向dev的当前提交,如下图,但这种模式下,删除分支后,会丢掉分支信息:


(3)no-ff模式,在合并的时候采用该模式,会新创建一个提交,并将master指向该最新提交。

1. 创建git工程
(1)创建本地库:执行命令 git init ,创建 .git隐藏文件
(2)本地库关联远程仓库:用github对工程进行托管,具体可参照添加远程库,为本地库添加远程仓库信息
创建完成后,本地工程如下:

2. 开发过程
假设有2名开发,bob和lilei。
(1)创建开发分支dev
git checkout -b dev,此时该分支还属于私人分支。
git push origin dev:dev,远程仓库创建dev分支,并与本地关联。
git checkout dev 切换分支(切之前,可以先执行 git pull 拉去分支信息)。

(2)对index.html文件进行修改,bob添加“add by bob”,提交到远程仓库,具体指令参照Git常用命令
(3)lilei拉取最新代码,并进行修改,在index.html中添加“add by lilei”
① git fetch origin dev 拉去dev分支最新代码
② git merge --no-ff -m '合并最新代码' dev 采用no-ff方式,将拉取的最新代码与本地合并,注意:不加 -m后边参数,会打开编辑器,输入注解
③ 在index.html中添加“add by lilei”,提交并push到远程仓库

(4)bob拉取最新代码,并将dev分支合并到master分支
① git pull origin dev 直接pull,代替fetch+merge操作,默认采用Fast-Forward模式合并。(此处应该采用(3)先fetch,再merge,分支结构更明显)

② git checkout master 切到主分支
③ git merge --no-ff -m 'merge with no-ff' dev 或者 git merge dev,会对dev和master进行合并提交

④ git push origin 将合并后的主分支同步到远程仓库
3. 分支结构
(1)采用no-ff模式
执行命令: git log --graph --pretty=oneline --abbrev-commit 查看分支图形结构,如下:

① bob在dev的本地分支上修改文件,并提交到远程仓库。
② lilei本地拉取最新文件,并采用 no-ff方式进行合并(新创建一个提交,从而是dev分支的HEAD指针指向新提交)
③ lilei修改文件,并提交到远程仓库。bob直接pull拉取,默认采用Fast-Forward模式。
④ bob将dev合并到master分支,执行命令 git merge --no-ff -m 'merge with no-ff' dev。
在github上查看最后一次提交,其中本次提交有2个parent(4f368cc和5b53028),与上图对应,如下:

(2)采用Fast Forward模式

① 第一种模式最后一次提交。
② bob将修改提交远程仓库。lilei从远程仓库直接pull拉取合并,采用Fast Forward方式,没有产生新的提交。
③ lilei将修改提交远程仓库。bob拉取远程仓库后合并(fetch+merge),采用Fast Forward模式,没产生新的提交。
④ 切换到master分支,执行 git merge dev 合并。
4. 合并冲突解决
遇到冲突时,Git已经做了合并,但是没有自动地创建一个新的合并提交。 Git会暂停下来,等待你去解决合并产生的冲突,然后再对冲突的文件执行提交(add、commit、push)即可。
具体做法参考:Git 分支 - 分支的新建与合并
Git分支创建与合并的更多相关文章
- git分支与主干合并操作
git分支与主干合并操作1.主干合并分支在主干上合并分支 branch (master)git merge branch --squash 提交合并后的代码 (master)git commit -m ...
- 史上最直接小白式的Sourcetree的分支创建与合并
一.Sourcetree简单介绍通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的. Sourcetree则可以与Git结合,提供图形界面,使 ...
- GitHub 的分支创建与合并
一个Git仓库可以维护很多开发分支.现在我们来创建一个新的叫"experimental"的分支: $ git branch experimental 如果你运行下面这条命令: $ ...
- Git 分支创建
分支策略:git上始终保持两个分支,master分支与develop分支.master分支主要用于发布时使用,而develop分支主要用于开发使用. 创建master的分支developgit che ...
- git 分支建立及合并
分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流. 你将经历如下步骤: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 正 ...
- git分支创建与切换
1. 场景描述 新版本迭代上线完成,为了保持当前版本稳定性及可回退等需求,需要切换新的分支用于下一版本的迭代开发. 2. 解决方案 2.1 切换前工作. 因发布上线当天有可能存在临时更改文件而未上传g ...
- Git分支管理及合并
Git分支管理 建立分支 git branch [name] 切换到分支 git checkout [name] 查看有哪些分支 git branch 比较分支 git diff [b ...
- SVN分支创建与合并
SVN分支 一个branch是某个development line(通常是主线也即trunk)的一个拷贝,branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发,待开发结束后合并 ...
- Git:创建与合并分支
1.1创建dev分支,使用命令符 git branch 分支名称. 1.2将HEAD指针切换到dev分支,使用命名符git checkout 分支名称. 注:创建并且转移可以合并为一个步骤,使用命令符 ...
随机推荐
- listview下拉刷新上拉加载扩展(二)-仿美团外卖
经过前几篇的listview下拉刷新上拉加载讲解,相信你对其实现机制有了一个深刻的认识了吧,那么这篇文章我们来实现一个高级的listview下拉刷新上拉加载-仿新版美团外卖的袋鼠动画: 项目结构: 是 ...
- 安卓ListView的性能优化
在安卓APP中LIstView这个控件可以说基本上是个APP就会用到,但是关于ListView除了需要了解其最基本的用法外,作为一个要做出高性能APP的程序员还需了解一些关于LIstView控件性能优 ...
- 【Unity Shaders】Lighting Models 介绍
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- C++为什么要设计友元函数和友元类
1. 首先要提一下java,比如java定义一个类1.class,会生成字节码.java有反射机制,可以找到类对象,直接修改类的私有属性.逐渐反射机制成为了一种标准,sun做成标准,JDK的API函数 ...
- Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
概述 在对Ext JS 6的应用程序打包后,时不时会出现以下错误: 由于是压缩后出现的错误,要进行调试也无从下手,因而这个错误会令新手手足无措,不知道是怎么回事. 错误原因 造成该错误的主要原因是要创 ...
- 在golang中使用leveldb
leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用. 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否 ...
- 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(二)
4.1 构建我们自己的映像 构建Docker映像有两种方法: •通过docker commit(提交)命令 •通过docker build(构建)命令以及Docker文件(Dockerfile) 目前 ...
- SpriteBuilder复杂CCB在App场景加载时报错排查
Player.CCB由body和arm两部分组成,它们都开启物理使能. 在GameScene.ccb中新建一个物理对象,将Player.ccb拖入该对象.此时编译运行App均正常. 然后继续添加其他物 ...
- AngularJS进阶(三十二)书海拾贝之特殊的ng-src和ng-href
书海拾贝之特殊的ng-src和ng-href 在说明这两个指令的特殊之前,需要先了解一下ng的启动及执行过程,如下: 1) 浏览器加载静态HTML文件并解析为DOM: 2) 浏览器加载angular. ...
- android自定义listview实现header悬浮框效果
之前在使用iOS时,看到过一种分组的View,每一组都有一个Header,在上下滑动的时候,会有一个悬浮的Header,这种体验觉得很不错,请看下图: 上图中标红的1,2,3,4四张图中,当向上滑动时 ...
