在 如何使用版本控制(Git)-安裝流程 以及 如何使用版本控制(Git)-使用Bash 當中已經對Git做出一些簡單的介紹了。
當你進行某一個專案的時候, 想要新增一個功能, 或者想要把專案分成多種版本, 就可以使用Branch的指令來完成這些動作。
Git最初就只有一個branch 命名為master, 雖然你可以一直在master上面進行無限次的commit, 但是其實這樣對於很多人來進行修改的時候, 未免會造成混亂, 另外一種是可以分成多種版本, 例如穩定版、測試版、完整版之類的分類, 因此要新增或修改某一個功能的時候, 比較好的做法是在開另外一支branch, 在這支新的branch上進行你要的開發之後, 再將branch合併回master。
接著檢視自己處於哪一個branch。
當你進行某一個專案的時候, 想要新增一個功能, 或者想要把專案分成多種版本, 就可以使用Branch的指令來完成這些動作。
Git最初就只有一個branch 命名為master, 雖然你可以一直在master上面進行無限次的commit, 但是其實這樣對於很多人來進行修改的時候, 未免會造成混亂, 另外一種是可以分成多種版本, 例如穩定版、測試版、完整版之類的分類, 因此要新增或修改某一個功能的時候, 比較好的做法是在開另外一支branch, 在這支新的branch上進行你要的開發之後, 再將branch合併回master。
branch可以將你本來的分支上面所有的檔案, 再複製一份到新的分支上(當然git不是真的將檔案複製一份, git辨識的檔案內容所計算出來的hash code, 在進行樹狀結構的排列, 不然如果真的複製一份, 開一百個分支, 不就產生一百個相同的檔案, 這也未免太不聰明了吧:P)
檢視目前有多少Branch。
假設目前你只有一個master, 那麼你會看到畫面上顯示master並且標註*你是在此分支上面。
$ git branch * master
要開一個新的Branch。
這樣就會產生一個你自己的所命名的分支。
假設你想要開啟一個新分支new_branch,
你就會看到
假設你想要開啟一個新分支new_branch,
$ git branch new_branch
你就會看到
$ git branch * master new_branch
雖然你開了一個new_branch, 但是你目前仍然處於master這個分支上面, 如果要切換到其他的分支則可以這樣操作。
$ git checkout new_branch Switched to branch 'new_branch'
接著檢視自己處於哪一個branch。
$ git branch master * new_branch
目前切換到new_branch了, 檢視一下是否跟master底下的資料相同。
沒錯! master底下原本就存在一個名為abc的檔案。
所以接下來要對這個分支進行檔案的新增以及修改。
查看abc這個檔案並沒有任何資料, 因此我們對這個檔案加上一些文字。
輸入完畢按下ctrl+C。
檢查一下文字是否有寫進去
嗯, 沒錯寫進去了, 接下來再新增一個檔案。
查看一下是否新增成功
就會看原本存在的abc檔案是存在並且被修改的狀態, 而新增的檔案edf是處於未追蹤的狀態,
所以我們對所有的檔案都加入追蹤
然後送出commit
就會看到多出一個log
這時候回到master這個branch
又回到原本只有存在abc的狀態
所以我們要將剛剛在new_branch做的事情跟master合併起來。
由此結果可以得知, merge成功了。
最後由於new_branch已經跟master進行合併了, 因此可以刪除掉這個分支
剩下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 blame 該隻檔案, 找出衝突的地方是由哪位 RD 開發人員來修改的, 然後詢問修改該行 code 的 RD 處理
$ 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
* master
new_branch
$ git branch -d new_branch
Deleted branch new_branch (was ff74489).
$ git branch
* master
剩下master的一個分支了。