分支模型
http://nvie.com/posts/a-successful-git-branching-model/
Git工作流程
服務(wù)器上常駐的分支有兩個:master
油讯、test
、 develop
延欠∧岸遥可以認為master代表的是生產(chǎn)環(huán)境,test代表的是測試環(huán)境由捎,develop代表開發(fā)環(huán)境兔综。
也就是說: master
分支上的任何一個點檢出都穩(wěn)定的,可以部署到生產(chǎn)環(huán)境服務(wù)器;而test
分支上每個點都可以檢出软驰,能啟動運行涧窒,但是未經(jīng)全部測試,還存在bug锭亏,develop
分支上任何一個點撿出來可以部署到開發(fā)環(huán)境上纠吴,這個開發(fā)環(huán)境是只針對開發(fā)調(diào)試用,這個環(huán)境可能會存在很多的問題慧瘤。
注意事項:切記不要在master分支上面直接提交代碼
不要使用 git push origin master呜象, 同時,master分支上的代碼也是只能通過合并test分支完成的 “git merge --no-ff test”
主要流程有4個:
- 已發(fā)布版本(生產(chǎn)環(huán)境)bug處理
- 未發(fā)布版本(測試環(huán)境)bug處理
- 新特性開發(fā)
- 合并請求處理
1.已發(fā)布版本bug處理:就是master上有錯誤碑隆,從test
分支檢出恭陡,處理完成后雙向合并到test
和develop
歇父,檢出的分支不提交到服務(wù)器馏鹤,在test驗證測試后,然后merge到master片择。
# 從test分支檢出
git checkout test # 切換到 test 分支
git fetch && git rebase # 從服務(wù)器下載最新代碼劫狠,如果本地有修改則合并上去拴疤,用 git pull --rebase 也可以,注意別用 git pull独泞,會導(dǎo)致git網(wǎng)絡(luò)圖混亂
git checkout -b hotfix#xxx
# 在${hotfix#xxx}分支上完成Bug處理呐矾,一次或多次 git commit
# 合并到test和develop
git checkout test
# 把最新的代碼撿下來并合并
git fetch && git rebase
# 把hotfix#xxxx分支合并到master
git merge --no-ff ${hotfix#xxx}
# 把合并完的master分支推到服務(wù)器上
git push origin test
git checkout develop
# 把最新的代碼撿下來并合并
git fetch && git rebase
# 把hotfix#xxxx分支合并到develop上
git merge --no-ff ${hotfix#xxx}
# 把合并完的develop分支推到服務(wù)器上
git push origin develop
# 把test分支的代碼合并到master
git checkout master
git fetch && git rebase
git merge --no-ff test
git push origin master
# 刪除本地開發(fā)分支
git branch -d ${hotfix#xxx}
2.未發(fā)布版本bug處理:也就是說是在測試環(huán)境上的bug處理,從test分支檢出懦砂,處理完成后雙向合并到test
和develop
# 合并到test和develop
git checkout test
# 把最新的代碼撿下來并合并
git fetch && git rebase
# 把hotfix#xxxx分支合并到master
git merge --no-ff ${hotfix#xxx}
# 把合并完的master分支推到服務(wù)器上
git push origin test
git checkout develop
# 把最新的代碼撿下來并合并
git fetch && git rebase
# 把hotfix#xxxx分支合并到develop上
git merge --no-ff ${hotfix#xxx}
# 把合并完的develop分支推到服務(wù)器上
git push origin develop
3.新特性開發(fā):從develop
分支檢出蜒犯,開發(fā)完合并到develop
分支,檢出的新特性分支需要提交到服務(wù)器上荞膘,便于多人協(xié)作
# 從develop分支檢出
git checkout develop
git fetch && git rebase # 從服務(wù)器下載最新代碼罚随,并與本地修改合并(如果有)
git checkout -b ${feature_name} develop # 分支名用小寫英文單詞,多個單詞以短橫線"-"分隔
# 提交新特性分支到服務(wù)器
git push origin ${feature_name}
# 在${feature_name}分支上開發(fā)羽资,多次git commit和git push origin ${feature_name}
#將完成的新特性提交到服務(wù)器
git push origin ${feature_name}
# 在gitlab中創(chuàng)建一個pull request
4.合并請求處理:主要指新特性開發(fā)完成后淘菩,合并到develop
分支
# 代碼審核
# 合并到develop分支
git checkout develop
git merge --no-ff ${feature_name}
# 提交develop到服務(wù)器,并刪除新特性分支
git push origin develop
# 刪除本地的分支
git branch -d ${feature_name}
# 刪除服務(wù)器上的分支
git push origin :${feature_name}
注意:相同分支的合并不要用 git merge屠升,也不要用 git pull潮改,要用 git rebase
對于服務(wù)器上別人已經(jīng)刪除的分支,可以用 git branch -rd origin/【分支名】
清理掉
但是在我本地 git branch -a
查看腹暖,還有顯示 remotes/origin/storetrsl
這個
這時可以用 git branch -rd origin/storetrsl
新功能開發(fā)時汇在,如果遇到需要將develop上面代碼合并到自己新功能分支上面的情況
#首先檢出服務(wù)器端最新代碼
git fetch origin
#將最新的develop分支代碼合并到新功能分支,這里需要處理沖突
git rebase origin/develop
#然后刪掉遠程倉庫的該功能分支
git push origin :${feature_name}
#最后微服,將本地的新的新功能分支推到服務(wù)器
git push origin ${feature_name}
命名
- hotfix#255 : 線上bug
- fix#255 :(未部署代碼中的bug)
- feature#273 : (新特性)
- improvement#269 : 改進(重構(gòu)等都可算改進)