用 git 有一段時(shí)間了,之前沒(méi)有詳細(xì)地了解 git flow,導(dǎo)致協(xié)作過(guò)程中或多或少出現(xiàn)了一些頭疼問(wèn)題。最近靜下心來(lái)理了下 git flow 的整個(gè)流程揽趾,再回頭看開(kāi)朗了不少,總結(jié)到這里苛骨。介紹的是一些常用的 git 基礎(chǔ)命令和 git flow篱瞎,當(dāng)然也很重要的,過(guò)程中自己在 Github 上建了一個(gè)模擬的 Demo 用來(lái)熟悉 git flow痒芝。其實(shí)從理解到動(dòng)手完成還是有點(diǎn)距離的俐筋,笨人有笨法嘛。如有不準(zhǔn)確的地方歡迎指正严衬。: )
Git 常用命令
這里列出了一些比較常用的 git 命令澄者,每個(gè)命令介紹后面都帶一個(gè)簡(jiǎn)單例子~
1. 新開(kāi)分支
$ git branch 新分支名
#新建分支 develop
$ git branch develop
2. 切換到另一個(gè)分支
$ git checkout 分支名
#切換到 develop 分支
$ git checkout develop
3. 新開(kāi)分支并切換到新分支
$ git checkout -b 新分支名
#新開(kāi) develop 分支,并切換到此分支
$ git checkout -b develop
4. 查看分支列表
$ git branch -a
頭部帶 remotes/origin 的请琳,表示遠(yuǎn)程分支
5. 查看遠(yuǎn)程分支列表
$ git branch -r
6. 向遠(yuǎn)程倉(cāng)庫(kù)提交本地新開(kāi)的分支
$ git push origin 新開(kāi)分支名
#提交新建的 develop 分支
$ git push origin develop
7. 刪除遠(yuǎn)程分支
$ git push origin --delete 遠(yuǎn)程分支名
#刪除遠(yuǎn)程倉(cāng)庫(kù)中的 develop 分支
$ git push origin --delete develop
8. 刪除本地分支
$ git branch -d 分支名
#刪除本地的 develop 分支
$ git branch -d develop
9. 更新分支列表信息
$ git fetch -p
用于協(xié)作時(shí)粱挡,項(xiàng)目隊(duì)友添加或刪除了遠(yuǎn)程分支的分支,可以通過(guò)這種方式來(lái)刷新分支列表信息
Git Flow 梳理
Git 開(kāi)發(fā)模式本質(zhì)上是一套流程俄精,團(tuán)隊(duì)每個(gè)成員遵守這套流程以確保完成可控的軟件開(kāi)發(fā)過(guò)程询筏。原文參考
1.主要分支
在遠(yuǎn)程倉(cāng)庫(kù)中有兩個(gè)主要分支的生命期可以無(wú)限長(zhǎng),分別是:
Master
Develop
master 分支(origin/master)
代碼倉(cāng)庫(kù)中有且僅有的一條主分支竖慧,默認(rèn)為 master 嫌套,在創(chuàng)建版本庫(kù)時(shí)會(huì)自動(dòng)創(chuàng)建。所有提供給用戶使用的正式版本的源碼圾旨,都會(huì)在這個(gè)分支上發(fā)布灌危。也就是說(shuō)主分支 master 用來(lái)發(fā)布重大版本。
develop 分支(origin/develop)
日常開(kāi)發(fā)工作都會(huì)在 develop 分支上面完成碳胳。develop 分支可以用來(lái)生成代碼的最新隔夜版本(nightly builds)。
創(chuàng)建 develop
分支
$ git checkout -b develop master
#push develop 到遠(yuǎn)程倉(cāng)庫(kù)
$ git push origin develop
當(dāng)我們?cè)?code>develop上完成了新版本的功能沫勿,最終會(huì)把所有的修改 merge
到 master
分支挨约。針對(duì)每次 master
的修改都會(huì)打一個(gè) Tag 作為可發(fā)布產(chǎn)品的版本號(hào)刻帚。
2.輔助分支
開(kāi)發(fā)過(guò)程中不可能項(xiàng)目人所有都在一個(gè) develop
分支中開(kāi)發(fā)临扮,版本管理會(huì)很混亂。所以除了主要分支外桩了,我們還需要一些輔助分支來(lái)協(xié)助團(tuán)隊(duì)成員間的并行開(kāi)發(fā)蔓挖。
所用到的輔助分支大體分三類:
- Feature branches(功能分支)
- Release branches(預(yù)發(fā)布分支)
- Hotfix branches(熱修復(fù)分支)
通過(guò)分支名我們能知道各類型分支都有特定作用夕土,對(duì)于他們各自的起始分支和最終的合并分支也都有嚴(yán)格規(guī)定。呼,雖然可能會(huì)麻煩點(diǎn)怨绣,但讓人一目了然的效果還是很誘人的角溃。
下面逐一介紹下各類型分支的創(chuàng)建使用和移除方法,過(guò)程中我在 Github
中創(chuàng)建一個(gè)虛擬的項(xiàng)目用來(lái)熟悉整個(gè)流程篮撑,或許你也可以像我一樣做一遍减细。哈,動(dòng)手總會(huì)有意外收獲嘛赢笨。廢話少說(shuō)未蝌,繼續(xù)正題~
2.1.Feature branches(功能分支)
應(yīng)用場(chǎng)景:
當(dāng)要開(kāi)始一個(gè)新功能的開(kāi)發(fā)時(shí),我門可以創(chuàng)建一個(gè) Feature branche
茧妒。等待這個(gè)新功能開(kāi)發(fā)完成并確定應(yīng)用到新版本中就合并回 develop
萧吠,那么如果不是就會(huì)被很遺憾的丟棄。桐筏。纸型。
應(yīng)用規(guī)則:
從
develop
分支創(chuàng)建,最終合并回develop
分支;分支名:feature/*;
Tips:這里很多地方說(shuō)用 feature-* 的方式命名九昧,因?yàn)楣卷?xiàng)目中用的 feature/*方式绊袋,也就習(xí)慣了,其實(shí)意思是一樣的铸鹰。
(1).Creat a feature branch
$ git checkout -b feature/test develop
do something in feature/test
branch
push 本地 feature/test
到遠(yuǎn)處代碼庫(kù)癌别;
$ git push origin feature/test
(2).切換到 develop 合并 feature/test
$ git checkout develop
$ git merge --no-ff feature/test
"- -no-ff" 的作用是創(chuàng)建一個(gè)新的 "commit" 對(duì)象用于當(dāng)前合并操作。這樣既可以避免丟失該功能分支的歷史存在信息蹋笼,又可以集中該功能分支所有歷史提交展姐。并且如果想回退版本也會(huì)比較方便。
(3).移除本地和遠(yuǎn)程倉(cāng)庫(kù)的 feature/test 分支
$ git branch -d feature/test
$ git push origin --delete feature/test
2.2.Release branches(預(yù)發(fā)布分支)
應(yīng)用場(chǎng)景:
"Release branches" 用來(lái)做新版本發(fā)布前的準(zhǔn)備工作剖毯,在上面可以做一些小的 bug 修復(fù)圾笨、準(zhǔn)備發(fā)布版本號(hào)等等和發(fā)布有關(guān)的小改動(dòng),其實(shí)已經(jīng)是一個(gè)比較成熟的版本了逊谋。另外這樣我們既可以在預(yù)發(fā)布分支上做一些發(fā)布前準(zhǔn)備擂达,也不會(huì)影響 "develop" 分支上下一版本的新功能開(kāi)發(fā)。
應(yīng)用規(guī)則:
從
develop
分支創(chuàng)建胶滋,最終合并回develop
和master
;分支名:release-*;
(1).Creat a release branch
$ git checkout -b release-1.1 develop
#push 到遠(yuǎn)程倉(cāng)庫(kù)(可選)
$ git push origin release-1.1
do something in release-1.1
branch
(2).切換到 master 合并 release-1.1
$ git checkout master
$ git merge --no-ff release-1.1
$ git tag -a 1.1
$ git push origin 1.1
當(dāng)我們的 release-1.1
的 Review 完成板鬓,也就預(yù)示著我們可以發(fā)布了。打上相應(yīng)的版本號(hào)究恤,再 push 到遠(yuǎn)程倉(cāng)庫(kù)俭令。
(3).切換到 develop 合并 release-1.1
預(yù)發(fā)布分支所做的修改同時(shí)也要合并回 develop
$ git checkout develop
$ git merge --no-ff release-1.1
(4).移除本地和遠(yuǎn)程倉(cāng)庫(kù)的 release-1.1
$ git branch -d release-1.1
$ git push origin --delete release-1.1
2.3.Hotfix branches(熱修復(fù)分支)
應(yīng)用場(chǎng)景:
"Hotfix branches" 主要用于處理線上版本出現(xiàn)的一些需要立刻修復(fù)的 bug 情況.
應(yīng)用規(guī)則:
從
master
分支上當(dāng)前版本號(hào)的tag
處切出,也就是從最新的master
上創(chuàng)建部宿,最終合并回develop
和master
;分支名:hotfix-*;
(1).Creat a fixbug branch
$ git checkout -b fixbug-1.1.1 master
#push 到遠(yuǎn)程倉(cāng)庫(kù)(可選)
$ git push origin fixbug-1.1.1
do something in fixbug-1.1.1
branch
(2).切換到 master 合并 fixbug-1.1.1
$ git checkout master
$ git merge --no-ff fixbug-1.1.1
$ git tag -a 1.1.1
$ git push origin 1.1.1`
bug 修復(fù)完成抄腔,合并回 master
并打上版本號(hào);
(3).切換到 develop 合并 fixbug-1.1.1
$ git checkout develop
$ git merge --no-ff fixbug-1.1.1
(4).移除本地和遠(yuǎn)程倉(cāng)庫(kù)的 fixbug-1.1.1
$ git branch -d fixbug-1.1.1
$ git push origin --delete fixbug-1.1.1
總結(jié)
啊哈,又到尾聲了赫蛇。上面的 Git 常用命令
和 Git Flow
只是一些基本常識(shí)绵患,并沒(méi)有什么新的東西加入。在平時(shí)的團(tuán)隊(duì)協(xié)作中有些對(duì)于我自身而言還是比較新鮮的棍掐,比如 tag 藏雏,這些一般都交給老大來(lái)弄(因?yàn)樗?review):D 。好像跑偏了作煌。掘殴。。對(duì)自己而言粟誓,理一遍后的收獲還是不小的奏寨,對(duì) Git Flow 的整個(gè)流程有了大概的了解,但具體每個(gè) git 命令內(nèi)部是怎么處理的呢鹰服,這個(gè)留到后面再梳理一下~
參考內(nèi)容:
Git分支管理策略
A successful Git branching model
戳這里前往我的小屋 I'm Jony :-D