软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 开发杂谈 -> Git命令学习之旅——分支 -> 正文阅读

[开发杂谈]Git命令学习之旅——分支


今天我们总结一下,Git中最为强大的一点——分支。那么什么是分支呢?
所谓分支,就是分出一个枝干,用于其他用途。
比如说,你们一个团队有3个人,要同时完成一个APP的开发,每个人负责不同的模块,那么怎么可以保证所有人都可以同时进行开发呢?
这个时候就需要引入分支的概念了,3个人,每人一个分支,分别完成,当任务完成之后就可以通过分支的合并将工作完成
那么我们应该如何建立分支呢?
首先,我们先查看我们现在所在的分支,输入命令:git branch      

[img]http://img.blog.csdn.net/20160402185901247?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
可以看到我们当前处于master分支(也就是主分支),且只有一个分支
我们新建一个a.txt方便理解,其内容为:Hello Git!
接下来我们要开始今天的任务了,需要新建一个分支,输入命令:git branch 【分支名】   
之后再输入:git branch 查看可以得到下图:
[img]http://img.blog.csdn.net/20160402190221077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
发现我们新建了一个today的分支,我们现在还是处于master分支中
接下来我们需要切换到today分支中,输入命令:git checkout 【分支名】 (这里就是输入:git checkout today)
可以得到一下提示:
[img]http://img.blog.csdn.net/20160402190429421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
再查看状态的时候,就可以看到我们处于today的分支了
[img]http://img.blog.csdn.net/20160402190459812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
之后在a.txt文件后面添加working表示正在工作,如下图:
[img]http://img.blog.csdn.net/20160402192350054?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
那么我们每次创建新的分支都需要这样写,然后再切换吗?
当然不是,为了偷懒,我们可以输入:git checkout -b 【分支名】  (用于创建并移动到新的分支中)
注:为了保证不会报错,切换分支之前最好保证每个分支的工作区是干净的(也就是说提交到分支,这里并没有涉及远程库,都是本地的操作)
当commit到分支之后可以分别查看master分支下的a.txt文件和today分支下的,发现只有today下的a.txt文件有“working”这一行
工作到一半,需要调试一个bug,这个时候在today分支之外再建立一个bug分支,然后调试bug,并将其commit到分支
此时a.txt内容如下:
[img]http://img.blog.csdn.net/20160402192523679?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
接下来将这个bug分支和today分支合并,将刚刚调试好的bug融入到今天的进度中
我们先checkout到today分支,输入命令:git merge 【分支名】  (这里是:git merge bug   将当前分支和bug分支合并)
[img]http://img.blog.csdn.net/20160402191952396?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这个时候再查看today分支下的内容,发现和bug下的内容一样
此时已经不再需要bug分支,所以可以将其删除,输入命令:git branch -d 【分支名】
得到提示:[img]http://img.blog.csdn.net/20160402192746399?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center表示分支已经删除,可以再次查看分支状态确认
当一天的任务完成之后我们可以按照相同的方法将today分支合并到master分支,最后push到远程库
以上纯属最为简单的创建合并分支,实际过程中当然没有那么简单,最常见的就是冲突!!
当你对原来的文件进行修改,或者你的两个分支对分别对一个文件进行了不同的修改之后,再想要合并的时候,就需要考虑冲突了
我们假设如下情况:
首先,在解决冲突之后,你继续在write分支下工作,突然有个补丁需要马上补上,因此你再新建了一个fix分支,并修补了补丁
其文件内容分别如下:
[img]http://img.blog.csdn.net/20160402193754637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center (正在编写)
[img]http://img.blog.csdn.net/20160402193811122?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center (修补补丁)
之后你需要将补丁补入正在编写的文件中,输入:git merge fix
这个时候会出现如下提示:
[img]http://img.blog.csdn.net/20160402193934731?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这里可以通过git status 命令查看问题所在,如下图所示:
[img]http://img.blog.csdn.net/20160402194037279?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
发现了问题所在之后,通过自己的编译器打开双方修改的文件(我这里是vim)
[img]http://img.blog.csdn.net/20160402194138295?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
可以看到这里将两个分支所修改的内容都显示了出来
<<<<<<HEAD”以下“======”以上是本分支所修改的内容,而下面">>>>>fix"之前就是在合并分支所修改的地方,这里就可以根据自己的需要将其修改之后保存退出
之后再commit,可以得到提示:[img]http://img.blog.csdn.net/20160402194432171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center表示两个分支已经合并,之后便可以删除fix分支了
(这里的“write and fix”是我在修改a.txt文件之后,commit时候的提示信息)
之后我们可以通过:git branch -v   查看每个分支最后提交的提示内容,如下图:
[img]http://img.blog.csdn.net/20160402194720672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
便于我们了解我们在每个分支都做了什么内容
同样的我们可以输入:git branch --merged   查看与当前分支合并了的分支,如下图:
[img]http://img.blog.csdn.net/20160402195625675?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center(这个是在today分支下查看的)
相对应的还可以输入:git branch --no-merged  查看与当前分支没有合并的分支,如下图:
[img]http://img.blog.csdn.net/20160402195736801?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center(这个是在today分支下查看的)
Git有个非常智能的一点在于,当你的分支内容没有合并的时候,如果输入删除分支的命令,它会提醒你不要这样做,如下图:
[img]http://img.blog.csdn.net/20160402195848973?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
(这个是在today分支下输入:git branch -d write)
当然你如果非要删除,可以按照提示输入:git branch -D 【分支名】

以上就是本地分支的一些操作和使用了,接下来再说一下远程分支吧
我们一般都是默认将本地的master分支推送到远程origin库中的master分支
但是当一个团队一起工作的时候,就需要建立远程分支,成员对产品的修改都在分支上实现,最后再合并到master分支上,作为最终版本
那么我们首先讲一下将本地的分支推送到远程分支
输入命令:git push 【远程库名】 【分支名】
:这里的远程库就是remote的时候链接的那个,而分支名就是新建的用于存放你的东西的文件名
例如,我将本地的today分支推送到Github上,输入:git push origin today  结果如下图:
[img]http://img.blog.csdn.net/20160402201637574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这样就在远程库创建了today分支
当然你还可以输入:git push 【远程库名】【本地分支名】:【远程分支名】
例如,我将本地的write分支推送到一个名为read的分支上,输入:git push origin write:read  结果如下图:
[img]http://img.blog.csdn.net/20160402201944341?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
此时在Github上查看,可以看到多了两个分支,分别为today和read,如下图:
[img]http://img.blog.csdn.net/20160402202042763?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
当然,我们还可以将不需要的远程分支删除掉,输入命令:git push 【远程库名】 :【远程分支名】
例如,将远程的read分支删除,输入:git push origin :read
[img]http://img.blog.csdn.net/20160402202305529?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
再次在Github上查看,可以看到read分支已经不在:
[img]http://img.blog.csdn.net/20160402202350248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
:这个删除命令,其实可以理解为将一个空的分支推送到read分支,并将其覆盖
最后说一下有关衍合的问题吧,其实我并没有很理解,这里就不乱说了,等以后了解了之后再做总结吧
就我现在而言,rebase和merge其实差不多都是对分支的合并,但是有一点要非常注意,那就是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。


......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:46:48  
开发杂谈 最新文章
BloomFilter
大学四年编程之历程
内核分析
造人论坛——意识的本质和一个人工脑模型
OFDM信号[matlab描述]
人类还会进化吗?
HDUACM1035RobotMotion简单模拟题
树、二叉树(二)
iisphpweb.config处理404,500等,跳转友好
DatabaseAsaFortress
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 14:43:29
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --