摘要:工作流如下圖所示現在讓我們來看一個最簡單的分支管理的例子。切換到之前實現新需求的分支,將修補分支合并進來,然后繼續工作。這里我們參考一文來學習工作流。分支產品發布測試分支。
Git 工作流如下圖所示:
現在讓我們來看一個最簡單的分支管理的例子。
Bug
需要緊急修補。這里我們參考 A successful Git branching model 一文來學習 Git 工作流。
主分支包括 master
分支和 develop
分支。
master
分支develop
分支master
分支用來發布,HEAD
就是當前線上的運行代碼。develop
分支就是我們的日常開發。使用這兩個分支就具有了最簡單的開發模式:develop
分支用來開發功能,開發完成并且測試沒有問題則將 develop
分支的代碼合并到 master
分支并發布。
主要介紹的輔助分支如下:
feature
分支release
分支hotfix
分支通過這些分支,我們可以做到:團隊成員之間并行開發,feature track
更加容易,開發和發布并行以及線上問題修復。輔助分支與主分支的不同點:輔助分支是有限的生命期,他們最終會被移除。
feature
分支用來開發具體的功能,一般 fork 自 develop
分支,最終可能會合并到 develop
分支。比如我們要在下一個版本增加功能 1、功能 2、功能 3。那么我們就可以起三個 feature
分支:feature1
、 feature2
和 feature3
。(feature
分支命名最好能夠自解釋,這并不是一種好的命名。)隨著我們開發,功能 1 和功能 2 都被完成了,而功能 3 因為某些原因完成不了,那么最終 feature1
和 feature2
分支將被合并到 develop
分支,而 feature3
分支將被干掉。
從 develop 分支建立 feature 分支并切換到 feature 分支。
$ git checkout -b myfeature develop
Switched to a new branch "myfeature"
$ git checkout develop
Switched to branch develop
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature
$ git push origin develop
上面我們 merge 分支的時候使用了參數 --no-ff
,ff 是fast-forward
的意思,--no-ff
就是禁用fast-forward
。關于這兩種模式的區別如下圖。(可以使用 sourceTree
或者命令git log --graph
查看。)
)
看了上面的圖,那么使用非fast-forward
模式來 merge
的好處就不言而喻了:我們知道哪些 commit
是某些 feature
相關的。雖然 git merge
的時候會自動判斷是否使用fast-farward
模式,但是有時候為了更明確,我們還是要加參數--no-ff
或者--ff
。
release
分支在我看來是 pre-master
。release
分支從 develop
分支 fork
出來,最終會合并到 develop
分支和 master
分支。合并到 master
分支上就是可以發布的代碼了。有人可能會問那為什么合并回 develop
分支呢?很簡單,有了 release
分支,那么相關的代碼修復就只會在 release
分支上改動了,最后必然要合并到 develop
分支。下面細說。
我們最初所有的開發工作都在 develop
分支上,當我們這一期的功能開發完畢的時候,我們基于 develop
分支開一個新的 release
分支。這個時候我們就可以對 release
分支做統一的測試了,另外做一些發布準備工作:比如版本號之類的。
如果測試工作或者發布準備工作和具體的開發工作由不同人來做,比如國內的 RD
和 QA
,這個 RD
就可以繼續基于 develop
分支繼續開發了。再或者說公司對于發布有嚴格的時間控制,開發工作提前并且完美的完成了,這個時候我們就可以在 develop
分支上繼續我們下一期的開發了。同時如果測試有問題的話,我們將直接在 release
分支上修改,然后將修改合并到 develop
分支上。
待所有的測試和準備工作做完之后,我們就可以將 release
分支合并到 master
分支上,并進行發布了。
一些相關命令如下。
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
File modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
$ git checkout master
Switched to branch master
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
$ git checkout develop
Switched to branch develop
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
顧名思義,hotfix
分支用來修復線上 bug
。當線上代碼出現 bug
時,我們基于 master
分支開一個 hotfix
分支,修復 bug 之后再將 hotfix
分支合并到 master
分支并進行發布,同時 develop
分支作為最新最全的代碼分支,hotfix
分支也需要合并到 develop
分支上去。仔細想一想,其實 hotfix
分支和 release
分支功能類似。hotfix
的好處是不打斷 develop
分支正常進行,同時對于現實代碼的修復貌似也沒有更好的方法了.
一些相關的命令。
$ 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(-)
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)
Fix bug 之后,hotfix
合并到 master
$ 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
$ git checkout develop
Switched to branch develop
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
master
分支:主分支,主要存放已經發布到生產服務器上的代碼。develop
分支:日常開發分支,該分支從 master
分支拉取,主要存放著在實現新的產品需求時開發的代碼。feature
分支:日常開發特性分支。一般從 develop
分支拉取,主要存放著在實現新產品需求具體功能時開發的代碼。具體功能開發完成之后將合并到 develop
分支。release
分支:產品發布測試分支。主要存放著從 develop
分支合并過來的代碼。 develop
分支的代碼在新的產品需求全部實現后會合并到 release
分支進行測試,測試沒有問題后(到了發布日期)將會合并到 master
分支并發布。測試有問題將會在 release
分支修改,修改測試沒問題后將會合并到 master
分支和 develop
分支。hotfix
分支:線上 bug 修復分支。主要存放這在緊急修補中為修復問題開發的代碼,在測試沒有問題后將會合并到 master
分支和 develop
分支。文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125991.html
摘要:掌握了命令行,使用圖形化工具如探囊取物。管理的文件狀態已修改已暫存已提交。由于我們使用了命令,但并未創建新的分支,所以創建了一個匿名分支。省略遠程分支名表示將本地分支推送到與之存在追蹤關系的遠程分支通常同名。概述此篇博文意在讓新手快速上手 Git,滿足工作中的基本需求,而非梳理細節。后續會再開一個系列,來探討 Git 細節問題。一、Git 的安裝這部分網站上資料非常多,根據自己的系統版本查找...
摘要:沒有一個全局的版本號,而有目前為止這是跟相比缺少的最大的一個特征。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。合并沖突多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫。Git 是一種分布式版本控制系統,它可以不受網絡連接的限制,加上其它眾多優點,目前已經成為程序開發人員做項目版本管理時的首選,非開發人員也可以用 Git 來做自己的文檔版本管理工具。 ...
閱讀 3528·2023-04-25 20:09
閱讀 3733·2022-06-28 19:00
閱讀 3053·2022-06-28 19:00
閱讀 3071·2022-06-28 19:00
閱讀 3160·2022-06-28 19:00
閱讀 2870·2022-06-28 19:00
閱讀 3031·2022-06-28 19:00
閱讀 2628·2022-06-28 19:00