專案一般會有develop、master另個分支develop分支部署在測試環境測試,多個開發工程師把自己的commit都提交到develop分支,交給測試工程師來測試;master分支是上線分支,測試沒問題的develop分支,在需要上線的時候合併到master分支。
保持master和develop提交歷史一致,每次develop合併到master的時候不會出現衝突,保證線上的程式碼和測試環境環測試完成的程式碼一致,避免因為合併程式碼引起線上出問題。
有時候需要臨時上線,可以基於master分支建立hotfix分支,測試後合併到master分支。
hotfix分支和develop分支是並行的,hotfix分支合併到master分支後,需要同時合併到develop分支,保證develop分支和master分支提交歷史一致。
hotfix分為兩種情況:
A:hofix和develop分支沒有修改相同檔案,不會出現衝突
1)master分支:
a -> b
2)develop分支
a ->b -> c commit c修改了檔案x
3)hotfix分支
a->b-> c1 commit c1 修改了檔案y
*合併操作如下:*
1)master merge hotfix
master: a->b->c1
2) develop rebase master
develop: a->b->c1->c 該過程中不會出現衝突(因為沒有修改相同檔案)
B:hotFix和develop分支修改相同檔案,出現衝突
1)master分支:
a -> b
2)develop分支
a ->b -> c commit c修改了檔案x
3)hotfix分支
a->b-> c1 commit c1 修改了檔案x
*合併操作如下:*
1)master merge hotfix
master: a->b->c
2) develop rebase master
develop: a->b->c1->c2
該過程中出現衝突(因為修改了相同檔案),需要手動修改衝突,確定最終x檔案的版本。commit c2是在c版本上解決衝突後的版本
按照上述流程修改後,develop合併master不需要解決衝突
tip: merge的時候請包含提交的commit資訊,使用下面命令操作,這樣方便檢視歷史記錄
git merge master --log --no-ff