相關(guān)分支
1、 Master
顧名思義,既然名字叫Master,那么該分支就是主分支的意思。在git repo下主分支的職責(zé)主要就是負(fù)責(zé)記錄stable版本的迭代,當(dāng)在beta版本的項目或是開發(fā)版本的項目得到了充分的驗證之后,我才能將分支并入master分支。master分支永遠(yuǎn)是production-ready的狀態(tài),即穩(wěn)定可產(chǎn)品化發(fā)布的狀態(tài)。
2、Develop
這個分支就是我們平常開發(fā)的一個主要分支了,不管是要做新的feature還是需要做bug fix,都是從這個分支分出來做。在這個分支下主要負(fù)責(zé)記錄開發(fā)狀態(tài)下相對穩(wěn)定的版本,即完成了某個feature或者修復(fù)了某個bug后的開發(fā)穩(wěn)定版本。
3、Feature branches
這是由許多分別負(fù)責(zé)不同feature開發(fā)的分支組成的一個分支系列。new feature主要就在這個分支系列下進(jìn)行開發(fā)。當(dāng)我在一個大的develop的迭代之下,往往我們會把每一個迭代分成很多個功能點,并將功能點分派給不同人的人員去開發(fā)。每一個人員開發(fā)的功能點就會形成一個feature分支,當(dāng)功能點開發(fā)測試完畢之后,就會合并到develop分支去。
分支管理策略
1、 準(zhǔn)備工作
從master上拉出develop分支
git checkout -b develop
如圖,當(dāng)前develop和master的head都指向同一個節(jié)點
2、 功能點開發(fā)
假設(shè)現(xiàn)在有一個功能點,指派給A同學(xué)進(jìn)行開發(fā)了。首先,他應(yīng)該從最新develop分支中拉出一個feature分支,假設(shè)為該feature分支命名為feature1。
$ git checkout -b feature1
Switched to a new branch 'feature1'
$ git branch
develop
* feature1
master
于是,我們便創(chuàng)建并切換到了feature1分支。
$ ls
1.txt 2.txt
$ echo "feature1" >> 1.txt
現(xiàn)在A同學(xué)開始了他的開發(fā),他將feature1寫入了1.txt,這樣他就完成了該功能點。那么之后他應(yīng)該進(jìn)行commit,并提交QA進(jìn)行相應(yīng)的功能測試
$ git status
# On branch feature1
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: 1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git add -A
$ git commit -m 'feature1'
提交之后,我們可以很容易的看到當(dāng)前的一個分支節(jié)點網(wǎng)絡(luò)的情況,如圖。
A同學(xué)開發(fā)的feature1分支有了更新,已經(jīng)超前于develop分支,因此我們現(xiàn)在需要對feature1分支進(jìn)行合并操作。
$ git checkout develop
Switched to branch 'develop'
$ git merge feature1
Updating 2ea6fb8..8d30443
Fast-forward
1.txt | 1 +
1 file changed, 1 insertion(+)
因為當(dāng)前我們并沒有發(fā)生沖突,所以develop分支的head只是單純的forward到了feature1分支的節(jié)點上。于是,我便完成了分支的合并,當(dāng)前的分支網(wǎng)絡(luò)如下圖。
3、 處理沖突(略)