一、分支概述
分支管理爲我們提供了多人同時開發的便利。假設你準備開發一個新功能,但是需要兩週才能完成,第一週你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能幹活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。
現在有了分支,就不用怕了。你創建了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。
二、分支管理本質
每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。在Git裏,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master纔是指向提交的,所以,HEAD指向的就是當前分支。
一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:
每次提交,master分支都會向前移動一步,這樣,隨着你不斷提交,master分支的線也越來越長。
當我們創建新的分支,例如創建新的分支名爲testing時,Git就新建一個指針叫testing,指向master相同的提交。當我們切換分支時,再把HEAD指向testing,就表示當前分支在testing上:
切換到testing分支後,對工作區的修改和提交就是針對testing分支了,比如新提交一次後,testing指針往前移動一步,而master指針不變:
假如我們在testing上的工作完成了,而master分支的內容沒有改變,就可以把testing合併到master上。就是切換回master分支後,直接把master指向testing的當前提交,就完成了合併:
另一種情況是當master分支和testing分支都各自有了新的提交,變成這樣:
這種情況下當我們切換回master分支,進行合併時,Git無法執行“快速合併”,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突。當有衝突時就必須需要我們手動解決衝突後,再自行提交。提交成功後就類似以下這樣:
三、分支操作的命令
1.創建分支
git branch [分支名]
創建一個新的名爲hot_fix的分支:
另外還可以使用git checkout
或git switch
命令來創建並切換分支
git checkout -b [分支名]
git switch -c [分支名]
#上面的命令相當於以下兩個命令:
git branch [分支名]
git checkout [分支名]
2.查看分支
git beanch -v
查看所有的分支,當前分支前面會標一個*
號,當前正處在master分支:
3.切換分支
git checkout [分支名]
#新版本的Git提供了git switch來切換分支,這個命令更容易理解。
git switch [分支名]
切換到hot_fix分支上:
4.合併分支
要合併分支,首先要切換到接受修改的分支上,再執行merge命令進行合併,命令如下:
git merge [分支名]
使用示例;
在test.txt文件中進行修改並提交,然後切換分支回到master中:
進行合併操作,然後查看文件內容:
5.解決衝突
合併後發生衝突的情況示例:
解決衝突:
此時我們必須手動解決衝突後提交,這裏Git用<<<<<<<
,=======
,>>>>>>>
標記出不同分支的內容,首先需要確定如何修改後編輯文件,需要刪除特殊符號和多餘內容。
然後將文件提交到暫存區然後提交,這裏的提交不能添加具體的文件名:
這樣就解決了分支衝突的情況。
使用git log
加上相應參數來查看分支合併情況:
git log --graph --pretty=oneline --abbrev-commit
6.刪除分支
刪除分支的命令,如下:
git branch -d [分支名]
刪除掉分支名hot_fix的分支:
四、總結
分支管理的相關命令:
- 查看分支:
git branch
- 創建分支:
git branch [分支名]
- 創建+切換分支:
git checkout -b [分支名]
或git switch -c [分支名]
- 切換分支:
git checkout [分支名]
或git switch [分支名]
- 合併某分支到當前分支:
git merge [分支名]
- 刪除分支:
git branch -d [分支名]
參考:創建與合併分支