Git详细教程(三)

Git —— 目前世界上最先进的分布式版本控制系统,高端大气上档次!

上一篇:Git详细教程(二)

四、分支

什么是分支?加入你现在正在开发一个新功能,突然线上出现了一个严重的bug需要立刻修复,但是你正在开发的新功能已经写了一半了,不能撤销,也不能运行,使得项目处于残废的状态。这个时候你就会用到分支功能了,创建一个新的分支,此时你就回到了你开始开发这个新功能最初的状态(也是最后一次提交的状态),在这个新分支上进行修改严重bug,修改完毕之后进行提交,然后再回到原来分支上继续开发你完成一半的新功能。

1、分支的新建、切换、合并、删除

一开始创建仓库的时候,Git会默认给我们一个master分支(可以理解为主分支,实际与其他分支没有任何区别),而且我们之前的提交都是在master分支上完成的

HEAD指向的就是当前的分支,假设目前的状态就是已经提交完新版本了,现在我们要开发一个新功能,代号为newfunc,为此我们创建一个新的分支,并在此分支上开发这个新功能,终端执行:

$ git branch newfunc      //创建一个名字为newfunc的分支
$ git checkout newfunc    //切换到该分支

然后我们就开始在此分支上进行开发了,写到一半时,突然领导发现了一个严重的线上bug让我们立刻解决并发布,显然很着急,但是现在新功能刚写到一半,不能运行,属于残废状态,撤销了吧也不可能毕竟辛辛苦苦写了很长时间了,怎么办呢?分支来帮你!此时将你正在写的提交,相当于保存进度

$ git commit -a -m "newfunc first commit"

然后切换到master分支

$ git checkout master      //切换分支

这个时候你会发现你的工作目录回到了你最后一次提交时的状态,现在就可以解决那个严重bug了,针对此bug,我们再新建一个分支

$ git checkout -b hotfix      //新建并切换到hotfix分支

接下来就是修改bug工作了,修改完毕之后进行提交

$ git commit -a -m "hotfix commit"

此时hotfix分支的工作全部完成了,然后就可以将其合并到你的master分支上了

$ git checkout master      //切换到master分支
$ git merge hotfix         //合并hotfix分支到当前分支

既然已经合并到一起了,你也就不再需要hotfix分支了,那么就把它删了吧

$ git branch -d hotfix      //删除分支

现在你可以切换回你正在工作的分支newfunc继续你的工作

$ git checkout newfunc      //切换分支

开发中............开发完毕了,提交

$ git commit -a -m "newfunc second commit"

此时,newfunc分支的工作也全部完成了,那么就可以将这两个分支合并起来了,其操作跟之前你合并 hotfix 分支差不多

$ git checkout master      //切换到master分支
$ git merge newfunc        //合并newfunc分支到当前分支

但是,Git的工作原理跟之前合并hotfix分支不一样,因为master分支所在提交并不是newfunc分支所在提交的直接祖先,出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C5 和 C6)以及这两个分支的共同祖先(C3),做一个简单的三方合并。

既然你的修改已经合并进来了,你已经不再需要newfunc分支了。 现在你可以删除这个分支了

$ git branch -d newfunc      //删除分支

2、解决冲突

有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,那么就会产生冲突

此时Git会暂停合并,等待你去解决冲突,接下来我们需要查找那些因包含合并冲突而处于未合并(unmerged)状态的文件

$ git status

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突,出现冲突的文件会包含一些特殊区段

<<<<<<<
=======
>>>>>>>

用过SVN的朋友相信都能看懂这个,手动解决完冲突,删除这些区段,用$ git add命令对每个冲突文件标记为已解决,再次运行$ git status来确认所有的冲突都已被解决

然后,提交

$ git commit -m "conflict fixed"

最后,删除newfunc分支

$ git branch -d newfunc

五、Git服务器

到目前为止,你基本上已经掌握了Git最常用的功能,你应该已经有办法使用Git来完成日常工作。 然而,为了使用Git协作功能,你还需要有远程的Git仓库 —— Git服务器。

Git服务器哪里来呢?两种方式,一是自己搭建,二是使用三方托管。
如果你选择方式一,自己搭建Git服务器,搭建简单,但是对服务器的设置和维护起来会消耗你大量的时间和精力,如果你想自己搭建,可参考搭建Git服务器
你也可以选择方式二,简单、方便,托管网站有好多,比较有名的比如GitLabGitHub

参考链接
Git - Book
Git教程 - 廖雪峰的官方网站

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容