具體上要開那些branch呢? 我習慣大致簡化分成三種
如上圖,團隊主要開發分支會在develop上。每天早晨主管核對完每個人的任務後,每個人會各自開發她們的feature,如人物(b1)開發feature/b1,人物(b2)開發feature/b2。完成自己的任務,或是快下班了,再將今天開發的東西merge給develop,當develop開發成熟後,就可以將develop merge給master,完成這一次的版本更新。
詳細參考: https://nvie.com/posts/a-successful-git-branching-model/
Feature開發完成後要併回develop,首先我們要先知道是誰合併誰。merge合併就像是吸收的動作,git status
看一下現在處於哪個分支,並且要吸收掉哪個其他分支。
# 想要develop merge掉feature/b1
# 先切換到develop
git checkout develop
# 合併
git merge --no-ff feature/b1
# --no-ff是合併後分支保留的意思
如果沒有加上--no-ff默認會把被合併的分支消滅,所以加上讓feature/b1繼續走下去。如下圖,成功合併。
假如今天feature/b2也修改了同一個檔案,並且嘗試給develop merge呢?會產生衝突
git merge --no-ff feature/b2
# 噴錯
# Auto-merging Apple.txt
# CONFLICT (content): Merge conflict in Apple.txt
# Automatic merge failed; fix conflicts and then commit the result
此時進入人工調整merge的時候,此時visual studuio會自動偵測那些地方有衝突,你必須手動去修改這些衝突。點選incomming(要變的)還是accept current (保留原始code)
\
決定後保存並commit,並且切換到b2,換他merge develop來同步最新的更新
git commit -am "合併b2"
git checkout feature/b2
git merge --no-ff develop
# 將這次的改變推上遠端倉庫
git checkout develop
git push origin develop
可以看到紅色為develop主幹道,feature/b1(綠色)與feature/b2(藍色) 對develop進行merge,merge完後再繼續進行開發。 (如果沒有--no-ff分支會消失)
簡單講一下正常的CI/CD軟體開發流程,通常開發人員不允許直接merge到master:
(master) git merge develop
下面來講一下怎麼pull request,其實github點一點就好。
此時Project Owner就會收到pull request的請求。點選merge pull requests即可。