隨著分布式和開源這些概念的不斷普及射富,現(xiàn)在有大部分的開發(fā)者都在用Git管理開源項(xiàng)目矢门、個(gè)人項(xiàng)目和公司的項(xiàng)目開發(fā)盆色。本篇博客主要是研究實(shí)際在使用Git進(jìn)行多人協(xié)作開發(fā)過程中的一些場(chǎng)景和解決方案。
引言
Git是一個(gè)開源的分布式版本控制系統(tǒng)祟剔,可以有效隔躲、高速的處理從很小到非常大的項(xiàng)目版本管理。
網(wǎng)上有許多介紹Git的博客等物延,下面就附上鏈接:
協(xié)同開發(fā)場(chǎng)景分析
場(chǎng)景一:開發(fā)分支錯(cuò)誤
項(xiàng)目來了個(gè)需求1
宣旱,從develop
分支中拉分支A
進(jìn)行開發(fā);開發(fā)的中途叛薯,又來了一個(gè)緊急需求2
浑吟,于是我就直接在A
分支中開發(fā)需求2
笙纤;直到發(fā)現(xiàn)不能在A
分支中開發(fā)需求2
的時(shí)候需求2
的代碼已經(jīng)commit
了幾次了。
如下圖提交:
m1-m2-m3-m4-m5
m1组力、m2省容、m5是需求1的代碼,m3和m4是需求2的代碼
解決方案:
假設(shè)m3和m4是commit id為0bda20e和1a04d5f
利用cherry-pick和revert:
- 從develop分支創(chuàng)建新分支B:
git checkout B
- 將A分支中的需求2的commit復(fù)制到分支B:
git cherry-pick 0bda20e 1a04d5f
- 撤銷在A分支中開發(fā)的需求2:
git checkout A
和git revert 0bda20e 1a04d5f
附上cherry-pick和revert的一些博客:
場(chǎng)景二:分支進(jìn)度不一致
m1-m2-m3-m4-m5-m6(master)
\
f1-f2-f3-f4-f5(feature)
多人協(xié)作開發(fā)時(shí)燎字,你需要開發(fā)一個(gè)新功能腥椒,于是你從master
上的commit3
開始拉了一個(gè)分支feature
,可是這個(gè)新功能開發(fā)周期很長轩触,等到你完成的時(shí)候寞酿,master
已經(jīng)提交到m6
了家夺。如上圖所示脱柱。
解決方案:
使用rebase:
- 切換到分支feature:
git checkout feature
- rebase到master:
git rebase master
- 有沖突解決后執(zhí)行:
git rebase --continue
分支樹則變成(如下圖所示)
m1-m2-m3-m4-m5-m6(master)
\
f1-f2-f3-f4-f5(feature)
附上rebase的一些博客:
暫時(shí)先發(fā)這么多拉馋,到時(shí)再補(bǔ)上榨为。有錯(cuò)誤的地方麻煩各位指正。謝謝煌茴!