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)記咬展,這樣你可以打開這些包含沖突的文件然后手動(dòng)解決沖突泽裳,出現(xiàn)沖突的文件會包含一些特殊區(qū)段
<<<<<<<
=======
>>>>>>>
用過SVN的朋友相信都能看懂這個(gè),手動(dòng)解決完沖突破婆,刪除這些區(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等