Git —— 目前世界上最先進(jìn)的分布式版本控制系統(tǒng),高端大氣上檔次!

四、分支
什么是分支?加入你現(xiàn)在正在開發(fā)一個(gè)新功能,突然線上出現(xiàn)了一個(gè)嚴(yán)重的bug需要立刻修復(fù),但是你正在開發(fā)的新功能已經(jīng)寫了一半了,不能撤銷,也不能運(yùn)行,使得項(xiàng)目處于殘廢的狀態(tài)。這個(gè)時(shí)候你就會用到分支功能了,創(chuàng)建一個(gè)新的分支,此時(shí)你就回到了你開始開發(fā)這個(gè)新功能最初的狀態(tài)(也是最后一次提交的狀態(tài)),在這個(gè)新分支上進(jìn)行修改嚴(yán)重bug,修改完畢之后進(jìn)行提交,然后再回到原來分支上繼續(xù)開發(fā)你完成一半的新功能。
1、分支的新建、切換、合并、刪除
一開始創(chuàng)建倉庫的時(shí)候,Git會默認(rèn)給我們一個(gè)master分支(可以理解為主分支,實(shí)際與其他分支沒有任何區(qū)別),而且我們之前的提交都是在master分支上完成的

newfunc,為此我們創(chuàng)建一個(gè)新的分支,并在此分支上開發(fā)這個(gè)新功能,終端執(zhí)行:
$ git branch newfunc //創(chuàng)建一個(gè)名字為newfunc的分支
$ git checkout newfunc //切換到該分支

然后我們就開始在此分支上進(jìn)行開發(fā)了,寫到一半時(shí),突然領(lǐng)導(dǎo)發(fā)現(xiàn)了一個(gè)嚴(yán)重的線上bug讓我們立刻解決并發(fā)布,顯然很著急,但是現(xiàn)在新功能剛寫到一半,不能運(yùn)行,屬于殘廢狀態(tài),撤銷了吧也不可能畢竟辛辛苦苦寫了很長時(shí)間了,怎么辦呢?分支來幫你!此時(shí)將你正在寫的提交,相當(dāng)于保存進(jìn)度
$ git commit -a -m "newfunc first commit"
然后切換到master分支
$ git checkout master //切換分支

這個(gè)時(shí)候你會發(fā)現(xiàn)你的工作目錄回到了你最后一次提交時(shí)的狀態(tài),現(xiàn)在就可以解決那個(gè)嚴(yán)重bug了,針對此bug,我們再新建一個(gè)分支
$ git checkout -b hotfix //新建并切換到hotfix分支
接下來就是修改bug工作了,修改完畢之后進(jìn)行提交
$ git commit -a -m "hotfix commit"

hotfix分支的工作全部完成了,然后就可以將其合并到你的master分支上了
$ git checkout master //切換到master分支
$ git merge hotfix //合并hotfix分支到當(dāng)前分支

hotfix分支了,那么就把它刪了吧
$ git branch -d hotfix //刪除分支
現(xiàn)在你可以切換回你正在工作的分支newfunc繼續(xù)你的工作
$ git checkout newfunc //切換分支
開發(fā)中............開發(fā)完畢了,提交
$ git commit -a -m "newfunc second commit"

newfunc分支的工作也全部完成了,那么就可以將這兩個(gè)分支合并起來了,其操作跟之前你合并 hotfix 分支差不多
$ git checkout master //切換到master分支
$ git merge newfunc //合并newfunc分支到當(dāng)前分支
但是,Git的工作原理跟之前合并hotfix分支不一樣,因?yàn)?code>master分支所在提交并不是newfunc分支所在提交的直接祖先,出現(xiàn)這種情況的時(shí)候,Git 會使用兩個(gè)分支的末端所指的快照(C5 和 C6)以及這兩個(gè)分支的共同祖先(C3),做一個(gè)簡單的三方合并。

newfunc分支了。 現(xiàn)在你可以刪除這個(gè)分支了
$ git branch -d newfunc //刪除分支
2、解決沖突
有時(shí)候合并操作不會如此順利。 如果你在兩個(gè)不同的分支中,對同一個(gè)文件的同一個(gè)部分進(jìn)行了不同的修改,那么就會產(chǎn)生沖突
此時(shí)Git會暫停合并,等待你去解決沖突,接下來我們需要查找那些因包含合并沖突而處于未合并(unmerged)狀態(tài)的文件
$ git status

任何因包含合并沖突而有待解決的文件,都會以未合并狀態(tài)標(biāo)識出來。 Git 會在有沖突的文件中加入標(biāo)準(zhǔn)的沖突解決標(biāo)記,這樣你可以打開這些包含沖突的文件然后手動解決沖突,出現(xiàn)沖突的文件會包含一些特殊區(qū)段
<<<<<<<
=======
>>>>>>>
用過SVN的朋友相信都能看懂這個(gè),手動解決完沖突,刪除這些區(qū)段,用$ git add命令對每個(gè)沖突文件標(biāo)記為已解決,再次運(yùn)行$ git status來確認(rèn)所有的沖突都已被解決

$ git commit -m "conflict fixed"
最后,刪除newfunc分支
$ git branch -d newfunc
五、Git服務(wù)器
到目前為止,你基本上已經(jīng)掌握了Git最常用的功能,你應(yīng)該已經(jīng)有辦法使用Git來完成日常工作。 然而,為了使用Git協(xié)作功能,你還需要有遠(yuǎn)程的Git倉庫 —— Git服務(wù)器。
Git服務(wù)器哪里來呢?兩種方式,一是自己搭建,二是使用三方托管。
如果你選擇方式一,自己搭建Git服務(wù)器,搭建簡單,但是對服務(wù)器的設(shè)置和維護(hù)起來會消耗你大量的時(shí)間和精力,如果你想自己搭建,可參考搭建Git服務(wù)器
你也可以選擇方式二,簡單、方便,托管網(wǎng)站有好多,比較有名的比如GitLab、GitHub等