摘要:工作流如下圖所示現(xiàn)在讓我們來看一個最簡單的分支管理的例子。切換到之前實現(xiàn)新需求的分支,將修補分支合并進來,然后繼續(xù)工作。這里我們參考一文來學(xué)習(xí)工作流。分支產(chǎn)品發(fā)布測試分支。
Git 工作流如下圖所示:
現(xiàn)在讓我們來看一個最簡單的分支管理的例子。
Bug
需要緊急修補。這里我們參考 A successful Git branching model 一文來學(xué)習(xí) Git 工作流。
主分支包括 master
分支和 develop
分支。
master
分支develop
分支master
分支用來發(fā)布,HEAD
就是當(dāng)前線上的運行代碼。develop
分支就是我們的日常開發(fā)。使用這兩個分支就具有了最簡單的開發(fā)模式:develop
分支用來開發(fā)功能,開發(fā)完成并且測試沒有問題則將 develop
分支的代碼合并到 master
分支并發(fā)布。
主要介紹的輔助分支如下:
feature
分支release
分支hotfix
分支通過這些分支,我們可以做到:團隊成員之間并行開發(fā),feature track
更加容易,開發(fā)和發(fā)布并行以及線上問題修復(fù)。輔助分支與主分支的不同點:輔助分支是有限的生命期,他們最終會被移除。
feature
分支用來開發(fā)具體的功能,一般 fork 自 develop
分支,最終可能會合并到 develop
分支。比如我們要在下一個版本增加功能 1、功能 2、功能 3。那么我們就可以起三個 feature
分支:feature1
、 feature2
和 feature3
。(feature
分支命名最好能夠自解釋,這并不是一種好的命名。)隨著我們開發(fā),功能 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 分支的時候使用了參數(shù) --no-ff
,ff 是fast-forward
的意思,--no-ff
就是禁用fast-forward
。關(guān)于這兩種模式的區(qū)別如下圖。(可以使用 sourceTree
或者命令git log --graph
查看。)
)
看了上面的圖,那么使用非fast-forward
模式來 merge
的好處就不言而喻了:我們知道哪些 commit
是某些 feature
相關(guān)的。雖然 git merge
的時候會自動判斷是否使用fast-farward
模式,但是有時候為了更明確,我們還是要加參數(shù)--no-ff
或者--ff
。
release
分支在我看來是 pre-master
。release
分支從 develop
分支 fork
出來,最終會合并到 develop
分支和 master
分支。合并到 master
分支上就是可以發(fā)布的代碼了。有人可能會問那為什么合并回 develop
分支呢?很簡單,有了 release
分支,那么相關(guān)的代碼修復(fù)就只會在 release
分支上改動了,最后必然要合并到 develop
分支。下面細說。
我們最初所有的開發(fā)工作都在 develop
分支上,當(dāng)我們這一期的功能開發(fā)完畢的時候,我們基于 develop
分支開一個新的 release
分支。這個時候我們就可以對 release
分支做統(tǒng)一的測試了,另外做一些發(fā)布準備工作:比如版本號之類的。
如果測試工作或者發(fā)布準備工作和具體的開發(fā)工作由不同人來做,比如國內(nèi)的 RD
和 QA
,這個 RD
就可以繼續(xù)基于 develop
分支繼續(xù)開發(fā)了。再或者說公司對于發(fā)布有嚴格的時間控制,開發(fā)工作提前并且完美的完成了,這個時候我們就可以在 develop
分支上繼續(xù)我們下一期的開發(fā)了。同時如果測試有問題的話,我們將直接在 release
分支上修改,然后將修改合并到 develop
分支上。
待所有的測試和準備工作做完之后,我們就可以將 release
分支合并到 master
分支上,并進行發(fā)布了。
一些相關(guān)命令如下。
$ 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
分支用來修復(fù)線上 bug
。當(dāng)線上代碼出現(xiàn) bug
時,我們基于 master
分支開一個 hotfix
分支,修復(fù) bug 之后再將 hotfix
分支合并到 master
分支并進行發(fā)布,同時 develop
分支作為最新最全的代碼分支,hotfix
分支也需要合并到 develop
分支上去。仔細想一想,其實 hotfix
分支和 release
分支功能類似。hotfix
的好處是不打斷 develop
分支正常進行,同時對于現(xiàn)實代碼的修復(fù)貌似也沒有更好的方法了.
一些相關(guān)的命令。
$ 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
分支:主分支,主要存放已經(jīng)發(fā)布到生產(chǎn)服務(wù)器上的代碼。develop
分支:日常開發(fā)分支,該分支從 master
分支拉取,主要存放著在實現(xiàn)新的產(chǎn)品需求時開發(fā)的代碼。feature
分支:日常開發(fā)特性分支。一般從 develop
分支拉取,主要存放著在實現(xiàn)新產(chǎn)品需求具體功能時開發(fā)的代碼。具體功能開發(fā)完成之后將合并到 develop
分支。release
分支:產(chǎn)品發(fā)布測試分支。主要存放著從 develop
分支合并過來的代碼。 develop
分支的代碼在新的產(chǎn)品需求全部實現(xiàn)后會合并到 release
分支進行測試,測試沒有問題后(到了發(fā)布日期)將會合并到 master
分支并發(fā)布。測試有問題將會在 release
分支修改,修改測試沒問題后將會合并到 master
分支和 develop
分支。hotfix
分支:線上 bug 修復(fù)分支。主要存放這在緊急修補中為修復(fù)問題開發(fā)的代碼,在測試沒有問題后將會合并到 master
分支和 develop
分支。文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125991.html
摘要:使用此命令能看到那些修改被暫存到了哪些沒有哪些文件沒有被到。需要說明一點,是本地的,不會通過命令上傳到上。查看現(xiàn)有的所有儲藏,此命令顯然暗示了可以多次保存工作進度,并用在恢復(fù)時候選擇。 Git 版本庫原理 Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。...
摘要:使用此命令能看到那些修改被暫存到了哪些沒有哪些文件沒有被到。需要說明一點,是本地的,不會通過命令上傳到上。查看現(xiàn)有的所有儲藏,此命令顯然暗示了可以多次保存工作進度,并用在恢復(fù)時候選擇。 Git 版本庫原理 Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。...
摘要:掌握了命令行,使用圖形化工具如探囊取物。管理的文件狀態(tài)已修改已暫存已提交。由于我們使用了命令,但并未創(chuàng)建新的分支,所以創(chuàng)建了一個匿名分支。省略遠程分支名表示將本地分支推送到與之存在追蹤關(guān)系的遠程分支通常同名。概述此篇博文意在讓新手快速上手 Git,滿足工作中的基本需求,而非梳理細節(jié)。后續(xù)會再開一個系列,來探討 Git 細節(jié)問題。一、Git 的安裝這部分網(wǎng)站上資料非常多,根據(jù)自己的系統(tǒng)版本查找...
摘要:沒有一個全局的版本號,而有目前為止這是跟相比缺少的最大的一個特征。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時降低對版本庫的破壞。合并沖突多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫。Git 是一種分布式版本控制系統(tǒng),它可以不受網(wǎng)絡(luò)連接的限制,加上其它眾多優(yōu)點,目前已經(jīng)成為程序開發(fā)人員做項目版本管理時的首選,非開發(fā)人員也可以用 Git 來做自己的文檔版本管理工具。 ...
閱讀 3580·2023-04-25 20:09
閱讀 3770·2022-06-28 19:00
閱讀 3115·2022-06-28 19:00
閱讀 3129·2022-06-28 19:00
閱讀 3230·2022-06-28 19:00
閱讀 2917·2022-06-28 19:00
閱讀 3104·2022-06-28 19:00
閱讀 2703·2022-06-28 19:00