項目通常會有develop、master另個分支develop分支部署在測試環境測試,多個開發工程師把本身的commit都提交到develop分支,交給測試工程師來測試;master分支是上線分支,測試沒問題的develop分支,在須要上線的時候合併到master分支。git
保持master和develop提交歷史一致,每次develop合併到master的時候不會出現衝突,保證線上的代碼和測試環境環測試完成的代碼一致,避免由於合併代碼引發線上出問題。測試
有時候須要臨時上線,能夠基於master分支創建hotfix分支,測試後合併到master分支。ip
hotfix分支和develop分支是並行的,hotfix分支合併到master分支後,須要同時合併到develop分支,保證develop分支和master分支提交歷史一致。開發
hotfix分爲兩種狀況:部署
A:hofix和develop分支沒有修改相同文件,不會出現衝突it
1)master分支:ast
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