Git詳細(xì)教程(三)

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

上一篇:Git詳細(xì)教程(二)

四、分支

什么是分支?加入你現(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分支上完成的

HEAD指向的就是當(dāng)前的分支,假設(shè)目前的狀態(tài)就是已經(jīng)提交完新版本了,現(xiàn)在我們要開發(fā)一個(gè)新功能,代號為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"

此時(shí)hotfix分支的工作全部完成了,然后就可以將其合并到你的master分支上了

$ git checkout master      //切換到master分支
$ git merge hotfix         //合并hotfix分支到當(dāng)前分支

既然已經(jīng)合并到一起了,你也就不再需要hotfix分支了,那么就把它刪了吧

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

現(xiàn)在你可以切換回你正在工作的分支newfunc繼續(xù)你的工作

$ git checkout newfunc      //切換分支

開發(fā)中............開發(fā)完畢了,提交

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

此時(shí),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è)簡單的三方合并。

既然你的修改已經(jīng)合并進(jìn)來了,你已經(jīng)不再需要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

參考鏈接
Git - Book
Git教程 - 廖雪峰的官方網(wǎng)站

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容