软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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
生肖星座 三丰软件 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 美图 中国文化英文版 多播 租车 短信
2017-7-24 10:33:12
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --