如何使用版本控制(Git)-Branch

如何使用版本控制(Git)-安裝流程 以及 如何使用版本控制(Git)-使用Bash 當中已經對Git做出一些簡單的介紹了。

當你進行某一個專案的時候, 想要新增一個功能, 或者想要把專案分成多種版本, 就可以使用Branch的指令來完成這些動作。

Git最初就只有一個branch 命名為master, 雖然你可以一直在master上面進行無限次的commit, 但是其實這樣對於很多人來進行修改的時候, 未免會造成混亂, 另外一種是可以分成多種版本, 例如穩定版、測試版、完整版之類的分類, 因此要新增或修改某一個功能的時候, 比較好的做法是在開另外一支branch, 在這支新的branch上進行你要的開發之後, 再將branch合併回master。




branch可以將你本來的分支上面所有的檔案, 再複製一份到新的分支上(當然git不是真的將檔案複製一份, git辨識的檔案內容所計算出來的hash code, 在進行樹狀結構的排列, 不然如果真的複製一份, 開一百個分支, 不就產生一百個相同的檔案, 這也未免太不聰明了吧:P)


檢視目前有多少Branch
git branch 
假設目前你只有一個master, 那麼你會看到畫面上顯示master並且標註*你是在此分支上面。
$ git branch
* master 

要開一個新的Branch
git branch <branch_name>
這樣就會產生一個你自己的所命名的分支。
假設你想要開啟一個新分支new_branch,
$ git branch new_branch 

你就會看到
$ git branch
* master
  new_branch 

雖然你開了一個new_branch, 但是你目前仍然處於master這個分支上面, 如果要切換到其他的分支則可以這樣操作。
git checkout <branch_name>
$ git checkout new_branch
Switched to branch 'new_branch' 

接著檢視自己處於哪一個branch。
$ git branch
master
* new_branch 

目前切換到new_branch了, 檢視一下是否跟master底下的資料相同。
$ ls
abc  

沒錯! master底下原本就存在一個名為abc的檔案。

所以接下來要對這個分支進行檔案的新增以及修改。
$ cat abc  

查看abc這個檔案並沒有任何資料, 因此我們對這個檔案加上一些文字。
輸入完畢按下ctrl+C。
$ cat > abc
This is abc file.  


檢查一下文字是否有寫進去
$ cat abc
This is abc file. 

嗯, 沒錯寫進去了, 接下來再新增一個檔案。
$ touch edf 

查看一下是否新增成功

$ git status
# On branch new_branch
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   abc
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       edf
no changes added to commit (use "git add" and/or "git commit -a") 

就會看原本存在的abc檔案是存在並且被修改的狀態, 而新增的檔案edf是處於未追蹤的狀態,

所以我們對所有的檔案都加入追蹤

$ git add .
$ git status
# On branch new_branch
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       new file:   edf
#       modified:   abc
#

然後送出commit

$ git commit -m "add edf file and modified abc"

[new_branch ff74489] add edf file and modified abc
 2 files changed, 1 insertion(+)
 create mode 100644 edf 

就會看到多出一個log

$ git log

commit ff74489add029760ccddeeb130eeb04ba5d9750c
Author: givemepass 
Date:   Wed Nov 13 14:08:49 2013 +0800

    add edf file and modified abc


commit d9fe03da5c649e18dddba8a0c4a1b9adb96082d2
Author: givemepass 
Date:   Wed Nov 13 14:02:55 2013 +0800

    add abc 

這時候回到master這個branch
$ git checkout master
Switched to branch 'master' 

$ git branch
* master
  new_branch 

$ ls
abc 


又回到原本只有存在abc的狀態

所以我們要將剛剛在new_branch做的事情跟master合併起來。


合併指定的 branch 分支, 注意是 A merge B 的話, 要先 checkout 到 A 再去 merge B , 而不是 B 去 merge A
發生衝突的話, 請先 git blame 該隻檔案, 找出衝突的地方是由哪位 RD 開發人員來修改的, 然後詢問修改該行 code 的 RD 處理
git merge <branch_name>

$ git merge new_branch
Updating d9fe03d..ff74489

Fast-forward

 abc | 1 +

 edf | 0

 2 files changed, 1 insertion(+)

 create mode 100644 edf 


由此結果可以得知, merge成功了。

$ ls
abc  edf 

$ git log
commit ff74489add029760ccddeeb130eeb04ba5d9750c
Author: givemepass 
Date:   Wed Nov 13 14:08:49 2013 +0800

    add edf file and modified abc


commit d9fe03da5c649e18dddba8a0c4a1b9adb96082d2
Author: givemepass 
Date:   Wed Nov 13 14:02:55 2013 +0800

    add abc 

最後由於new_branch已經跟master進行合併了, 因此可以刪除掉這個分支
git branch -d <branch_name>

$ git branch
* master
  new_branch

$ git branch -d new_branch
Deleted branch new_branch (was ff74489).

$ git branch
* master

剩下master的一個分支了。