前端開發-Gitflow
master
分支存在於整個專案週期,主分支。master
分支不能有任何程式碼的提交,開發人員只能從其他分支提交PR(pull request),由專案負責人合併。
Q: 為什麼沒有develop分支
A: develop分支的職責已經分配到feature和hotfix中,將臨時分支的修改合併到develop後再合併到master好像沒有意義。為了避免引起困惑,所以移除develop分支。
臨時分支
feature
feature
分支用於開發新的功能,不同業務應該建立不同的feature分支。
-
從
master
分支建立 -
開發測試完成合並至
release
後刪除
release
release
分支用於預釋出和迴歸測試。
-
從
master
分支建立 -
釋出完成後打上tag合併至
master
後刪除
hotfix
hotfix
分支用於修復線上問題。
-
從
master
分支建立 -
釋出完成打上tag合併至
master
後刪除
示例
新需求開發
假設專案有一個名為me1124
的需求,我們從master
建立一個新的分支
git branch feature/me1124
然後經歷了N次提交,測試後準備上線。
假設此時我們的版本是1.0.0
使用merge
// 從master分支建立release/1.0.0分支 git checkout -b release/1.0.0 git merge feature/me1124 git branch -d feature/huafang
使用rebase
// 從master分支建立release/1.0.0分支 git checkout -b release/1.0.0 git checkout feature/me1124 git rebase release/1.0.0 git checkout release/1.0.0 git merge feature/me1124 git branch -d feature/me1124
在release/v1.0.0
分支進行最終測試後,我們打上tag並變基到master,並刪除release分支。此處tag的應該和版本號保持一致。
使用merge
git checkout master git merge release/v1.0.0 git tag v1.0.0 git branch -d release/v1.0.0
使用rebase
git rebase master git tag v1.0.0 git checkout master git merge release/v1.0.0 git branch -d release/v1.0.0
Q: 為什麼不直接從feature分支合併到master呢
A:
-
存在多個業務需求並行開發,並在同一個版本釋出的情況。
-
開發過程中有線上bug修復。
-
1,2情況需要進行迴歸測試。
-
使用release分支在語義上更加符合開發流程。
線上bug修復
線上bug修復的邏輯和新需求開發基本一致,個別地方有所區別。
假設我們需要修復一個名為missing-phone的bug,
git checkout master git branch hotfix/missing-phone
然後經歷了N次修復,測試完畢後準備上線。
與feature分支不同的是,hotfix分支的程式碼基於穩定的功能,測試完畢後不需要通過release分支即可釋出上線。hotfix分支同樣需要打上tag.
git rebase master git tag v1.0.1 git checkout master git merge hotfix/missing-phone git branch -d hotfix/missing-phone
Merge vs Rebase
並不強制使用merge或者rebase。但是為了避免衝突,同一個專案儘量使用同一個方式。
參考文件:
- Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6" target="_blank" rel="nofollow,noindex">merge
- rebase
Merge
優勢在於操作簡單,不易出錯,而且是很多工具的預設合併方式。
缺點在於協同開發時,2個分支如果都有修改,合併後圖形會出現岔路,看起來有些混亂(也有觀點認為還原了歷史)。
Rebase
優勢在於分支的圖形線性,清晰。
缺點在於:
- 協同開發時,拉取遠端程式碼要使用變基拉取(git pull – rebase) 。不然在分支變基時要重新解決衝突(簡單理解就是之前的提交記錄當做patch重新應用,那麼之前有衝突也會復現)。
End
此文件內容來源於楊騏彰的分享;此工作流有點是維護的分支較少,思路清晰,專案就master和正在開發的分支,剩下的就只有tag標籤了。