其實git除了版本控制,另外一個最突出的特點就是他的分支操作。簡直 絲滑~.git也是多人協作的必備武器。 通常我們正常情況下只需要master 和 develop分支就夠了。 這里我們先以這兩條分支作為基準,進行一系列的操作。
開發新功能流程
這個應該屬于develop分支的所有(Master分支只管穩定版). 第一步,應該創建develop分支。
git checkout -b develop
然后拷貝主分支上的內容
git rebase master
(  ̄3)(ε ̄ ), ok, 正常情況下,你的develop分支和master上的分支就一模一樣了。 但是有的童鞋會有疑問,特么你為什么不用merge呢?
我就不用~ 就不用~ 就不用~
(づ ̄ 3 ̄)づ , 其實使用merge和使用rebase的區別就是,(使用mege是終極合并分支,使用的是fast-forward的模式,造成兩個分支的同步,給你開發新功能造成不必要的麻煩,當然,你可以使用. git merge --no-ff master
合并,就可以啦。而你如果使用這個方式的話,會造成你圖譜git出現不必要的復雜度。。。而使用rebase會改變的你分支的基底~ 這樣看起來舒服一點。。。)
不懂誒~ ~ ~ ::>_<::
沒事,上面括號里面知識參考的,你不看根本沒關系。 如果你感 性 趣的話,可以參考英文rebase講解 | | 中文rebase講解
所以這里我就不贅述了,繼續
這時候我們就要在develop分支上開發新分支了。
現在假設我們已經做了一些改動(可能已經過去兩天了).
這時候我們要把develop分支提交到遠端,但在提交之前需要再同步一下master分支(為什么? 你猜~ 你也可以不同步,反正下次拉下來再同步的時候難受的是你自己)。接著使用:
git fetch origin master
git rebase master
Ok~ 如果沒出什么conflict那么恭喜你,你已經學會了同步分支的流程。
另外,rebase還有一個iteractive模式,其實就是用來處理在你開發時別人提交的commit 和相關的-m參數. 這里我們不做要求,因為好麻煩, 笨寶寶不想說 (~﹃~)~zZ。
如果感興趣的同學可以參考: 傳送門
OK,最后當你develop分支開發完畢,這時候你需要切換到master分支上去合并。
git checkout master
git merge --no-ff develop
OK,如果沒有conflict恭喜,已經成功.
恩,說道這里,兩個分支的開發git已經基本完畢了。
(┬_┬),為什么兩個分支開發起來都這么復雜。
小朋友,你知道在一些團隊,他們用的是5個分支嗎?
主要分支: master,develop
輔助分支: hotfix,feature,release
這里我們來介紹一個git的語法糖~git flow
git flow的開發流程
這個應該是集各種糖之大成,然你免去創建分支,刪除分支,切換分支,打標簽等等各種煩惱,以及...自行google
這里我只講干貨誒。
先按慣例上張圖:
這個是gitflow的鼻祖做的講解圖。 看不懂吧,我一開始也看不懂,后面寫寫的就懂了。
我先按分支說一下他們各自的功能吧:
主要分支:
1. master: 穩定發布版(永遠隱藏)
2. develop: 持續更新版(永遠工作)
輔助分支:
1.feature: 同步develop開發新功能,完成后與develop合并(merge)
2. release: 當新功能版本開發完后,就可以使用release分支進行創建分支并且合并,修完bug之后,與develop和master分支進行合并
3. hotfix: 這個應該算是緊急情況吧,當線上出問題的時候,需要馬上進行修復,然后再提交。 完成后,會與develop和master分支進行合并.
ok , 基本上,說了各自分支的一些基本用處。 現在我們來正式介入git flow這個神奇的語法糖。
首先,我們要安裝git-flow這個命令集合。
在MAC上,我們直接可以使用:
brew install git-flow; //安裝
在windows上,可以使用:
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
直接復制貼到命令行就可以了。
git flow init
首先創建你的git 分支群,即上面說的那幾個。 接下來,zsh || bash || cmd會彈出一個對話框.
像這樣,閉著眼睛,一直點[Enter]就可以了。
接下來你會發現,你初始化的時候就是處在develop分支上面的.
Ok~ 正常的話,我們就可以開始進行功能的開發了。
使用git flow feature start [branchName]命令,建立你的功能分支, 之后你便可以創建一些特定功能.(他省去了,你創建分支,并rebase分支這一過程,超棒.~^_^~ )
git flow feature start headerBar
之后他會提示你一些信息,告訴你現在正在feature/headerBar分支上,然后你就可以進行一些開發...
當然,功能開發是一項長久的任務,以后你也需要不斷的進行git rebase develop
進行分支的更新,然后繼續開發。 要知道gitflow只是一個語法糖,原生的git命令你完全都可以用的。
所以,你還可以將新建的功能分支保存到遠端.
git flow feature publish feature/[branchName]
//或者使用原生的
git push origin feature/[branchName]
我傾向于用原生的...
完成開發之后一定要記著使用.git flow feature finish [branchName]
.
這里我們使用headerBar分支
git flow feature finish headerBar
Ok~ 它便會將你的分支與develop進行合并,然后并且刪除該feature分支。 如果你不犯傻兩邊都改動(develop和feature分支), 應該不會出現conflict的。
滿意~ #^_^#.
現在你的develop分支已經開發成熟了,想要發布一個測試版,這時候就可以使用git flow release start [tag]
. 進行發布,記著打上標簽(版本號). 還有,要保證這個release是你當前最穩定的版本才行。
git flow release start v0.0.1
棒~ 現在,你已經創建了一個release的0.0.1版。然后,你可以在release分支上進行最后的修改。
現在,準備工作已經基本做完,現在我要正式發布啦~~
怕拉吧~ ( ⊙ _ ⊙ )一般吧
使用git flow release finish [tag]
后面跟上你創建release的指定版本號,這里我們接著使用v0.0.1
git flow release finish v0.0.1
Ok~這時候,release分支會和develop,master分支進行合并,然后被刪除。 也就是,只有在release的時候,我們才能真正的接觸到master分支。 這也是git-flow最讓我感到震撼的, 完整的規范化,簡直了~ 我愛 上它了。
還記得我們打的標記嗎? 沒錯,他會保存在你的git倉庫里。你可以使用git tag
進行檢查.
另外gitflow還有一個致命誘惑就是他的hotfix分支。簡直啦~~~ 超級棒。
當你的master已經上線,但是突然出現一個bug的話,你可以直接在master分支上改動,但是有個問題就是,master的分支超前了develop分支,造成你版本的混亂。 所以,這里我們可以直接使用git flow hotfix start [tagName]
, 其中tagName是新建的一個分支,表示完成bugfix的版本號。
git flow hotfix start v0.0.2
現在,我們已經創建了一個分支hotfix/0.0.2, 而且他貼心的幫我們rebase了master內容,然后我們完成之后就可以使用git flow hotfix finish [tagName]
進行hotfix的收尾工作。
git flow hotfix finish v0.0.2
OK, 然后貼心的zsh會給你一些提示信息,說明已經和master,develop分支合并,完成了bug的修復。棒~
所以,現在大多數team的都已經使用git-flow進行git的布局和管理,我們可以和如翔一般的分支管理說拜拜啦~ 雖然說是5大分支,但其實,我們的主要存在的分支依然只有develop和master分支~ 最后我們在一起回顧一下,git-flow的工作流程:
1. 創建分支: git flow init
2. 進行功能分支的開發: git flow feature start [branchName]
3. 進行功能的合并: git flow feature finish [branchName]
4. 進行發布版的準備: git flow release start [tagName]
5. 完成發布版: git flow release finish [tagName]
6. 熱插拔修復bug: git flow hotfix start [tagName]
7. 完成hotfix: git flow hotfix finish [tagName]
OK~ 現在git-flow我們已經基本學會了。當然,git原本就好到無懈可擊,加上git-flow的優化,簡直,神一般的存在。 最后再搬一句我愛的idiom:
Blessing in disguise
前端路漫漫a ~