關於Git Branch 的操作與基本工作流程,
這一系列是比較白話的解釋和指令使用的時機,甚至還有情境呢~!
Git branch
branch (分支)應該是 Git 最重要的技能了,在一個多人專案的開發過程中我們有時候要開發新功能,有時候是要修正某個Bug,有時候想要測試某個特異功能能不能 work ,這時候我們通常都會從主 branch 再開出一條新的 branch 來做,這支新開的 branch 會帶著你的主 branch 目前的最新狀態,當你完成你所要開發的新功能/ Bug 修正後確認沒問題就再把它 merge(合併)回主 Branch ,如此便完成了新功能的開發或是 Bug 的修正,因此每個人都可以從主 branch 拉一條新的 branch 來做自己想做的事,再來我們好好了解一下 branch 的使用。
了解 branch 最好的方法就是有圖像可以看,你可以用任何你已安裝的GUI來查看,但在你安裝 Git 的時候其實同時也安裝了最基本的 Git GUI 叫做 gitk,你可以使用
gitk --all
這個指令來呼叫他,此時你應該能看到以下的畫面:
點擊左上方區塊的 commit 節點你可以看到當次 commit 的詳細資料,例如作者以及他的更新記錄,但你會發現這時候終端機是無法輸入的,因此請你先關掉 gitk ,改打指令
gitk --all &
來讓 gitk 在背景執行。git branch
這個指令可以列出所有的 branch 並告訴你目前正在哪個 branch:$ git br * master develop feature/test
上面的訊息告訴我們在這個 Git repository裡有3支 branch ,而你目前正在 master branch 上。假設我們現在要開一支新的 branch 叫做 cat ,使用
git branch
來幫助你開一支新的 branch$ git branch cat $ git branch cat * master
上面我們開了一支新的 branch 叫做 cat ,使用
git branch
再查看一次發現已經多了這支新的 branch了,這時候你去查看你的 gitk 的圖像狀態會發現像下圖一樣,新的 branch cat 與 master 在同一條水平線上,表示目前他們的狀態是一模一樣的。
你應該也有發現,雖然我們建立了一個 cat 的 branch ,但其實我們所在的 branch 還是在 master branch,因此我們現在還需要切換過去,因此我們使用
git checkout
來切換:$ git checkout cat Switched to branch 'cat'
這樣就會從原本的 mater branch 切換到 cat branch 了。
接下來假設我正在 cat 這支 branch 做開發,因此新增一個檔案,加上一些內容,將它 add 到 stage 後再 commit 它。
$ vim lib/cat.rb $ git status # On branch cat # Untracked files: # (use "git add..." to include in what will be committed) # # lib/cat.rb nothing added to commit but untracked files present (use "git add" to track) $ git add lib/cat.rb $ git commit -m "Add Cat.rb" [cat ea7d309] Add Cat.rb 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 lib/cat.rb
上面的流程你已經很熟悉了,接下來我們再切換到原本的 master branch ,這時候你會發現剛剛在 cat branch 新增的 cat.rb 檔案已經不見了。
$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit.
Git 在我們切換 branch 的同時就會很聰明的會把我們的工作目錄更動成那個 branch 該有的狀態,如果你這時候切換到 GUI 去看,你會發現到與剛剛 cat 和 master branch 在同一條水平線上不同,cat branch現在已經比 master branch 再多出了一個 commit 的內容。
現在我在切換到 cat branch 去增加更多的內容,一樣再將它 add 到 stage 後,再 commit 它。
$ git checkout cat Switched to branch 'cat' $ mvim lib/cat.rb $ git add lib/cat.rb $ git commit -m "Add initializer" [cat a3bce42] Add initializer 1 files changed, 3 insertions(+), 1 deletions(-)
切到 GUI 來看的話你會發現現在 cat 這支 branch 比 master branch 要在多上兩個 commit 的內容。