分支的基礎觀念可以參考官網說明
建立iss53分支
$ git branch iss53
切換到iss53分支
$ git checkout iss53
可以簡化為git checkout -b,如此一來便會先建立再切換到該分支
$ git checkout -b iss53
Switched to a new branch 'iss53'
假設我們在iss53分支上做了幾個commit後,發現master有個bug要修,情況如下圖
我們要切換回master去修改bug,切換前分支上的程式要儲存(stash)或是commit上去
$ git checkout master
Switched to branch 'master'
再在master上建立一個hotfix分支
等bug fix好之後再合併(merge)回master分支
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
README | 1 -
1 file changed, 1 deletion(-)
如果合併時,不需要經過處理需要解決的分歧,只是指標的前進時,合併時就會出現“Fast forward”的提示。這種合併過程可以稱為快進(Fast forward)。
已經合併回master的hotfix分支,可以刪除掉
$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
master的問題解決後可以切換回iss53上繼續處理未完的項目
不過注意此時hotfix解決的問題並未合併到iss53上
作法有2
我們在master分支去合併iss53,這次的合併就不是快進了,如下圖所示
這次,Git 沒有簡單地把分支指標右移,而是對三方合併後的結果重新做一個新的快照,並自動創建一個指向它的提交物件(C6)
合併好之後,iss53也可以刪除了
$ git branch -d iss53
假設在改iss53的時候也動到了hotfix有動到的檔案時
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
這時候Git有做合併但是沒有commit,等我們手動確認合併的內容是否正確
可以利用之前提過的git status來確認衝突狀態
Git會在衝突的檔案內提示有哪些衝突要待人工修正
衝突修正後可以利用git add將這些檔案加入暫存區域
如此一來便可以commit這些已解決衝突的檔案