iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
0
自我挑戰組

Git學習筆記系列 第 6

分支 (Branch)

  • 分享至 

  • xImage
  •  

分支的基礎觀念可以參考官網說明

  • 建立一個分支的成本很低
  • Git 中的分支實際上僅是一個包含所指物件校驗和(40 個字元長度 SHA-1 字串)的檔
  • 分支間的切換,僅透過HEAD指標的指向來達成
  • 每次commit後 HEAD 隨著分支一起向前移動
  • Git 鼓勵開發者頻繁使用分支

建立分支

  • Git init後,我們會使用一個叫master的分支

建立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

  • 透過git merge master將master合併到iss53
  • 等iss53處理完,合併到master

我們在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這些已解決衝突的檔案


上一篇
與遠端儲存庫的互動
下一篇
Git 小劇場 git stash
系列文
Git學習筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言