iT邦幫忙

0

Git-了解分支&分支(建立、切換、刪除、回復)

git
WM 2019-05-10 20:01:18396 瀏覽

在軟體開發的過程當中,幾乎都是以團隊為單位在開發,那是否有個共同的機制,可以掌握每個團隊成員的開發進度,也可以讓成員各自獨立開發自己的部分,而不互相影響呢?

以下,我們就要來了解Git重要的核心之一:分支(branch)

分支是什麼?

https://ithelp.ithome.com.tw/upload/images/20190510/20112573aDsnQuwVqn.png
圖片來源

假設客戶有個正式上線的網站,位於master分支(藍點),版本是0.1。
上線數日,發現bug要修。
但總不可能邊修邊update,讓使用者看到。也不可能把網站關掉,等修好再上線。

這時,可以開一條hotfixes分支(紅點),master分支與hotfixes分支的內容一模一樣。
換個角度想,這兩條分支,是平行時空,在hotfixes分支所做的任何異動,跟master分支無關,完全無影響。
我們就可以在hotfixes分支做任何事情,也不怕改壞,導致網站掛掉。
等修好,確認OK,就跟master分支合併(merge),合併後的master分支,commit成0.2版。
這樣做的好處就是,我們在處理bug的過程中,網站依舊可以上線,頂多只是有bug。

不只hotfixes,假設客戶想要新增功能,可以再另開develop與feature分支,
每測試一個階段就commit一次,正式上線之前,還可以另開release分支,做最後確認,
測試通過,合併到master分支,成1.0版,
再次發現問題,一樣回到develop與feature分支修改。

建立分支

新建Angular專案。
一進入Git Bash就會在資料夾旁顯示目前所在的分支(master)。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573a8pQWtHZy6.png
master是最初預設的分支。
指令git branch可以查看目前有哪些分支,因為專案無任何異動,所以目前只有master分支。

指令 git branch [分支名稱],可以建立新的分支。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573Ce2Gx5bUax.png
目前有兩條分支:master、feature。

切換分支

指令 git checkout [分支名稱],可以切換分支。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573OxGvI8s0M3.png
從master分支切換到feature分支。

同時建立與切換分支

指令 git checkout -b [分支名稱],可以同時建立與切換分支
https://ithelp.ithome.com.tw/upload/images/20190510/20112573VTL93e4J4s.png
在建立hotfixes的同時,直接切換過去。
目前專案有3條分支。

刪除分支

指令 git branch -d [分支名稱],可以刪除分支。

重點注意,無法刪除本身所在的分支。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573tZqZUSufjl.png

假設要刪除hotfixes分支,就必須得切換到其他分支,才能執行。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573vLg2UAd1zK.png
成功刪除hotfixes分支,確認目前專案分支數。

刪除分支的限制

重點注意,若要刪除的分支,本身有commit,且未被合併(merge),無法使用-d刪除。
在feature分支把src資料夾刪掉,並commit。
https://ithelp.ithome.com.tw/upload/images/20190519/20112573R2hQn4boW8.png

執行git branch -d feature會收到警告。
https://ithelp.ithome.com.tw/upload/images/20190519/20112573XzduYvZcDQ.png
意思是說,如果確定要刪除,請使用-D指令。

執行git branch -D feature
https://ithelp.ithome.com.tw/upload/images/20190510/20112573p4N4OcSqiP.png
確實刪除。

回復誤刪的分支

剛剛刪除的範例,成功執行後,git會提供被刪除分支最新的commit ID。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573v8IAYaiLim.png

再次建立分支,並加上commit Id。
https://ithelp.ithome.com.tw/upload/images/20190510/201125734KJk0csLPw.png
連同commit紀錄都會復原回來。

分支的獨立性

稍早說過,分支之間並不會互相影響,可以視為獨立的個體。

接續剛剛的範例。
目前feature分支,有2個commit,最新的commit是刪除scr資料夾。
所以可以預見的是,專案中,不會看到src資料夾。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573531s8mts7P.png

切換到master分支。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573BbcKbA11Lo.png
從log可以看出,只有1個commit。
並且scr資料夾出現了,這是因為,master分支並沒有刪除scr資料夾。
https://ithelp.ithome.com.tw/upload/images/20190510/201125734sIkGLI8ry.png

那接下來,我們在master分支刪除tslint.json,並且commit。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573lLLO0RaPAj.png

所以,目前最新的master分支狀態是這樣的:有src資料夾,刪除tslint.json
https://ithelp.ithome.com.tw/upload/images/20190510/20112573JpZV6AJjlO.png

切換到feature分支。
https://ithelp.ithome.com.tw/upload/images/20190510/201125738mcac3XT4I.png
feature分支分支狀態:刪除src資料夾,有tslint.json。
https://ithelp.ithome.com.tw/upload/images/20190510/20112573sUy54qIoxl.png

藉由以上的範例,了解分支之間的確是不會互相影響的。

本文為觀看網路教學的學習筆記。


尚未有邦友留言

立即登入留言