今天這篇文章我們繼續Git教學的第五篇,主要講解的是git的分支管理,這也号稱是git的‘必殺技特性’。
git
分支是什麼?git通過保存一系列不同時刻的文件快照來實現數據存儲。
每次在進行git提交時,都會生成一個提交對象,這個提交對象都會産生一個指向暫存區内容快照的指針。而且每個提交對象中都會包含一個指向上一次提交(父提交對象)的指針。
通過這一系列指針的指向,就構成了一個分支上的所有提交記錄。如下圖中,一個分支上的三次提交記錄,生成三個版本快照,然後通過指針相連。
HEAD指針
通過git branch命令也可以查看當前處于哪個分支上。如果當前在哪個分支上,則在分支名之前有一個‘*’标識。
git branch
分支的合并在一個上線的項目中,一般至少會有多個用于運行的分支,比如生産環境一般是master分支,開發環境下的dev分支,測試環境下的test分支,還有一系列的個人開發分支self。
分支的合并有merge指令即可完成,merge完成後兩個分支記錄将處于同一個狀态。
比如我們在發現一個線上問題時,需要由master分支新拉一個hotfix分支進行問題的修複,此時的分支情況可能如下如所示。
分支記錄
在hotfix分支上修複完問題後,可以切換至master分支,然後将hotfix分支合并至master分支。
合并分支
在分支合并完後,分支情況如下圖所示。
合并後的分支
删除本地分支當我們不再需要一個本地分支時,可以通過-d參數來删除它。
有一點需要注意的是,需要先checkout到别的分支才能删除需要删除的分支。
如上一個例子,當hotfix修複完畢後可以将hotfix分支删除。
删除分支
有沖突時的分支合并當多人協同開發時,出現文件沖突是一件很常見的事情。
沖突的原因是同一個文件的同一個部分,在不同的分支中都有修改,這樣git就無法自動合并,而是将有沖突的信息暴露出來交由開發人員自己修改後再進行合并。
當我們通過merge命令合并有沖突的分支時,會出現CONFLICT字眼,如下圖中的提示信息。
沖突提示
當出現沖突時,是無法merge成功的,後續的操作也将被阻塞住,因此解決沖突是一步必要的操作。
-
沖突文件内容
如果文件沖突後,我們打開沖突的文件,沖突部分的内容會有很明顯的<<<<<< ======= >>>>>>> 等标識。
如下圖所示就是一個沖突的文件内容。
沖突文件内容
上圖中表示的是在HEAD分支和iss53分支的index.html文件沖突,接下來就需要開發人員進行決定,是選用HEAD分支中的内容還是選用iss53分支中的内容,而删掉另一個分支的内容。
-
繼續合并
當開發人員将沖突解決後,需要再進行一次git add操作将修改的文件再次添加至暫存區,并且進行一次commit操作。
解決沖突時可以直接通過git commit而不用添加-m選項填寫額外的提交信息,默認的提交操作後會出現以下信息。
解決沖突後默認commit信息
當然如果手動填寫了-m提交信息,也是可以的,就如同正常的提交操作。
結束語今天這篇文章主要講解了git branch相關的内容,通過實際的演示提示大家的理解,大家要好好消化。
,