∞ 前言 ∞

前一篇已經說了 git 該如何開始,接下來就是較為進階一點,關於 branch(分支) 的用法
在說明 branch 之前,這裡提供一個 git 的入門教學,除了看我的文章外也能跟著做,了解的會更快

try git

Branch(分支)

當我們在使用 git 的時候,一開始會有個預設為 master 的主要 branch (分支)
沒有做特別的控制的話,我們整個的軟體開發都會在這條 master 主分支上
但是這會發生問題

當我們 code 寫錯或發生某種錯誤的時候,會想要回到前一個好的版本,或是好的功能,或是其他穩定的部分
但這時我們的選擇只有這條 master 上的所有記錄
如果穩定版本與欲回溯的版本之間是錯誤的發生點,那我們究竟該回到穩定的版本?還是回到錯誤發生點後已經在開發中的版本呢?

舉個例子來說
穩定的版本是 v1.0
功能開發中, code 也已經寫很大量的版本是 v1.5
問題發生點,而造成必須大改, code 卻只寫很少的版本是 v1.1

此時我們為了穩定的版本只能回到 v1.0,但此時就等於放棄了已開發許多的版本與 code
如果為了已經開發很多而不想重寫,只回到 v1.5,那之後的惡性循環會越來越慘
我相信寫了一段時間的 Developer 一定有過類似的經驗

當然我這邊舉的例子是最極端的,或許不會這麼慘,但也不會好到哪去
所以我們在開發新功能時,可以切出一個專門開發新功能的 branch (分支),所有的 code 的維護都在這條分支上
如果這個功能又細分出其他部分,還可以以這條 branch 為主,再開新的一條分支,將大量的 code 盡可能細分分散

簡單來說,就是『分散風險原則』,我想這個詞彙最能表達出 branch 的概念了吧

Branch 使用

Branch 使用
1. git branch :查看目前你 local 端所有的分支
2. git branch <branch name> :在自己的 local 端創造新的 branch
3. git checkout <branch name> :將你目前的分支換到你想要開發的指定分支
   例:目前在 master branch,想要切換到 develop branch,就打 git checkout develop
4. git push origin <branch name> 
   將寫好的 code add  commit 好之後,又只想 push 這個目前在開發的 branch
   就用這個指令指定要 push  branch,若是使用 git push 而不加上 branch 的名字,
   那可是會把其他開發中還沒改好的 branch 也一起 push  server 上,這可是會非常慘的請注意。
5. 重點來了,請看下面

Branch Merge(合併分支)

當我們開發出各種 branch 與功能時,最後一定都需要合併 merge 起來
不然在你的 master branch 上的 application 是不可能有你在其他 branch 上開發的功能的
至於該怎麼 merge ,其實又是一門藝術了,merge 不好可能會重演昨天鍾蕉授的悲劇

然後鍾蕉授是哪位,我想哪天再來介紹他這位大師好了。

簡而言之,merge 請小心,否則你可能會被你的協作者扁

使用方法

使用方法
1. checkout to branch that you want to release 
   請切換 branch 至你想要發佈或主要的分支上(非被 Merge 的分支)
       例:master 是我們主要的分支,而 develop 是我們開發新功能的分支
   此時我們為了將新功能放回主要分支 master 上,就要將 branch 切換至 master
2. git merge <the branch you want to merge> 
   merge 完後,你會得到一個訊息:Merge branch "Develop" into master
 簡單來說就是把 develop 這個 branch 合併回 master (別忘了我們目前的 branch  master
   **超級大重點****超級大重點****超級大重點**
   說了這麼多,但我必須請你放棄使用第二點的指令,當然不放棄也可以,但還是建議放棄,原因在於,請使用第三點指令
3. git merge --no-ff <your branch name> 
   發現第二點與第三點的不同了吧?第三點多了  --no-ff  的指令
       這個指令的意思其實在 GUI 上比較能明顯看出,不然我們也可以從下圖看出端倪
       若是只使用第二點的指令,就會像右邊的圖一樣,只有一條,而看不出有與其他哪條分支作過 merge
       而第三點指令的 --no-ff 則會讓 merge 的狀態做保留(如下左圖)

merge-without-ff.png
圖片來源

簡單來說,第三點的指令就是為了把你做的壞事留下證據,讓你外遇的事實曝光,讓你說當選捐半薪的言論被拍下日後拿來罵,讓你......

反正凡走過必留下痕跡......不過對我們的 code 來說不是壞事,所以千萬不要討厭第三點的指令啊!
除非你開發的功能或影響真的小到可忽視,不然還是請不要使用第二點指令,轉用第三點指令來達成 merge 的效果
以上是 branch 的使用法與 git 的入門階段結束,其實已經談到一點進階的部分了,不過算了・゜゚・:.。..。.:・'(゚▽゚)'・:.。. .。.:・゜゚・

Comments

comments powered by Disqus