目前開發(fā)的項目采用git作為版本管理工具,
平時開發(fā)有兩個分支,develop和master
在develop上開發(fā),
在master發(fā)布正式版本。
目前有這樣一種情況:
有一個設計好的功能,由于種種原因,在develop分支上開發(fā)完成后不能正常使用,
需要使用另一個補救性的設計方案臨時代替,此代替方案需要上線,發(fā)布到master里面
當原功能成熟后,再刪除這個補救方法,切換回原有的功能
請問我該使用哪種git分支策略?
推薦Gitlab flow中的merge request方式
master, develop分支都是不讓直接push的
master = production
develop = next release
當有新需求時,建立需求分支 feature/aaa
開發(fā)完成后創(chuàng)建 merge request
code review 后合并 feature/aaa
到 develop
分支
上線時合并 develop
分支到 master
發(fā)布 master
分支
對于樓主的問題可以這樣
基于 feature/aaa
建立新分支 feature/bbb
完成補救工作后合并到 develop
, feature/aaa
建立新分支 feature/bbb
完成補救工作后合并到 develop
, master
然后上線
繼續(xù) feature/aaa
的開發(fā)工作,最后合并到 develop
, feature/aaa
的開發(fā)工作,最后合并到 develop
, master
可以參考 git workflow
大致就是 從 master
分支checkout
一個hotfixes
分支。在hotfixes
把補救的寫好,然后分別merge
到master
和develop
。此時就可以刪除這個hotfixes
分支。
然后再從develop
分支開發(fā)完善你的功能,最后把develop
分支merge
到master
上線。
或許還有更好的方法,僅供參考
先幫樓主解決這個問題。
樓主的分支策略不用做特殊處理,按照正常的流程,結合 git 的功能即可處理的很好:
按照我的理解,樓主所說的“原功能”、“補救方案”這些都是正常的代碼提交。樓主所困惑的應該是臨時補救方案最終要被丟棄(回滾)這個問題如何處理,所以使用上面提到的 git revert 命令應該能滿足樓主的預期。這樣既能保證所有的對代碼庫的操作都可以被記錄在主干(master、develop)中,也避免了復雜的分支模型等問題。
另外,不知道樓主使用的分支策略是不是 按照 @rsj217 提到的 workflow 來做的。如果 develop 是所有開發(fā)人員的主要開發(fā)分支的話,我覺得 develop 最好還是不要接受未完成的開發(fā)特性直接提交比較好。日常的開發(fā)工作,尤其是多特性/分支并行開發(fā)的情況下,多個特性分支能避免相互之間的干擾。
回到樓主的問題上來,這個不能使用的設計方案可以繼續(xù)開發(fā),不要合并到 develop 上去?;谶@個分支 checkout 一個補救特性的開發(fā)分支,測試完成后合并到 develop 進入發(fā)布流程即可。后面的 merge 和 revert 建議還是要的,非迫不得已不要違背流程做特殊處理,而且這樣保留了所有的代碼commit操作。
建議參考git工作流 master主分支 develop用于開發(fā) release用于發(fā)布新版本 hotfix用于修復線上bug等緊急操作
姑且說你的補救分支是develop1,上線之后develop1和master會merge到一起變成了新的master,原功能的分支develop等成熟穩(wěn)定之后merge下新master(很大可能會沖突),把develop1的那部分刪掉,測試沒問題上線。有點麻煩,可能還有點笨,可是git每次merge都是向前產生了一個新的點,你要是想等develop穩(wěn)定了把master回退,如果中間有其他發(fā)布了,不久丟東西了么。
或許還有更好的方法,僅供參考
如果看 A successful Git branching model 吃力,可以看 Juven Xu 的翻譯 一個成功的Git分支模型
使用git-flow會對你有幫助,可以用簡單的命令,幫你完成創(chuàng)建,完成分支。并且有規(guī)范的release,hotfix,feature工作流