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教程 - 廖雪峰的官方網站

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容