Git —— 目前世界上最先進的分布式版本控制系統,高端大氣上檔次!
四、分支
什么是分支?加入你現在正在開發一個新功能,突然線上出現了一個嚴重的bug需要立刻修復,但是你正在開發的新功能已經寫了一半了,不能撤銷,也不能運行,使得項目處于殘廢的狀態。這個時候你就會用到分支功能了,創建一個新的分支,此時你就回到了你開始開發這個新功能最初的狀態(也是最后一次提交的狀態),在這個新分支上進行修改嚴重bug,修改完畢之后進行提交,然后再回到原來分支上繼續開發你完成一半的新功能。
1、分支的新建、切換、合并、刪除
一開始創建倉庫的時候,Git會默認給我們一個master分支(可以理解為主分支,實際與其他分支沒有任何區別),而且我們之前的提交都是在master分支上完成的
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服務器
你也可以選擇方式二,簡單、方便,托管網站有好多,比較有名的比如GitLab、GitHub等