git分支模型的疑問
漂亮男人
漂亮男人 2017-05-02 09:19:06
0
3
619

如上圖的一個成功分支模型。

我的疑問就是,在其他一些輔助性分支merge到develop分支之前,develop分支有改變,那麼輔助性分支應該merge develop分支,與develop分支保持同步,但是從圖上並看不出這個動作。

如果其他輔助性分支需要即時同步develop分支,那麼用merge --no-ff,還是直接merge或rebase呢?

那麼這樣一來圖形是不是會變亂?


這是我本地測試的情況,都用的merge --no-ff模式合併


目前又遇到一個問題是,同一個分支不同人clone到本地,做開發,然後在push的時候,偶爾會發生一個merge動作,大概是這樣的,在本地git push 的時候,提示需要先pull ,此時git pull會自動執行一個merge動作,不知道大家曾經遇到這個問題沒?

還有多人開發的時候,大家是不是都自己創建一個branch分支開發,而不是直接在遠端的分支上做開發,例如develop是個遠端分支,那麼多人開發的時候clone到本地,直接在develop上開發,還是git checkout -b local branch開發?
ps:不知道描述清楚沒.

漂亮男人
漂亮男人

全部回覆(3)
大家讲道理

如果讓我做的話, 我會這麼做.
從develop分出去的多個分支, 都只透過develop來交換代碼, 互相之間不會合併.

各分支同步develop分支的時候, 都使用--rebase選項, 將develop的最新提交同步到開發分支, 然後再將此開發分支使用--no-ff選項合併回develop, 這樣保持單一分支的commit的連續性.

Ty80

這是我本地測試的情況,都用的merge --no-ff模式合併

巴扎黑

建議參考我校稿的這篇文章

http://fanyi.jobbole.com/2214/

例如hotfix分支,最後要checkout到develop分支進行merge就可以了

Hotfix分支從master分支建立,必須合併回develop分支和master分支,為Hotfix分支可以這樣取名:hotfix-*

Hotfix分支在某種程度上非常像release分支,他們都意味著為某個新版本發布做準備,並且都是預先不可知的。 Hotfix分支是基於當前生產環境的產品的一個bug急需解決而必須創建的。當某個版本的產品有一個嚴重bug需要立即解決,Hotfix分支需要從master分支上該版本對應的tag上進行建立,因為這個tag標記了產品版本

建立hotfix分支

Hotfix分支從master分支進行建立。例如目前線上1.2版本產品因為server端的一個Bug導致系統有問題。但是在develop分支進行更改是不可靠的,所以我們需要建立hotfix分支,然後開始解決問題:

$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)

千萬別忘記在建立分支後修改版本號。

然後解決bug,提交一次或多次。

$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)

結束hotfix 分支

完成工作後,解決掉的bug程式碼需要合併回master分支,但同時也需要合併到develop分支,目的是確保在下一版中該bug已經解決。這多麼像release分支啊。

首先,對master分支進行合併更新,然後打tag

$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1

備註:你可以使用-s or -u 參數為你的tag設定標籤簽名。

緊接著,在develop分支合併bugfix程式碼

$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)

這裡可能會有一些異常情況,當一個release分支存在時,hotfix 分支需要合併到release 分支,而不是develop分支。當release分支的使命完成後,合併回release分支的bugfix程式碼最終也會被合併到develop分支。 (當develop分支急需解決這些bug,而等不到release分支的結束,你可以安全的將這些bugfix程式碼合併到develop分支,這樣做也是可以的)。

最後刪除這些臨時分支

$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!