Git 常用命令和 Git Flow 梳理

git

用 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 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

develop 和 master 關(guān)系圖

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ì)把所有的修改 mergemaster 分支挨约。針對(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(功能分支)

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ī)則:

  1. develop 分支創(chuàng)建,最終合并回 develop 分支;

  2. 分支名: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ì)比較方便。

git merge --no-ff 圖示

(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ī)則:

  1. develop 分支創(chuàng)建胶滋,最終合并回 developmaster;

  2. 分支名: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ù)分支)

Hotfix branches 圖示

應(yīng)用場(chǎng)景:

"Hotfix branches" 主要用于處理線上版本出現(xiàn)的一些需要立刻修復(fù)的 bug 情況.

應(yīng)用規(guī)則:

  1. master 分支上當(dāng)前版本號(hào)的 tag 處切出,也就是從最新的 master 上創(chuàng)建部宿,最終合并回 developmaster;

  2. 分支名: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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末病瞳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悲酷,更是在濱河造成了極大的恐慌套菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件设易,死亡現(xiàn)場(chǎng)離奇詭異逗柴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)顿肺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門戏溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人屠尊,你說(shuō)我怎么就攤上這事旷祸。” “怎么了讼昆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵托享,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浸赫,道長(zhǎng)闰围,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任掺炭,我火速辦了婚禮,結(jié)果婚禮上凭戴,老公的妹妹穿的比我還像新娘涧狮。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布者冤。 她就那樣靜靜地躺著肤视,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涉枫。 梳的紋絲不亂的頭發(fā)上邢滑,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音愿汰,去河邊找鬼困后。 笑死,一個(gè)胖子當(dāng)著我的面吹牛衬廷,可吹牛的內(nèi)容都是我干的摇予。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吗跋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侧戴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起跌宛,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酗宋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后疆拘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蜕猫,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年入问,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丹锹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芬失,死狀恐怖楣黍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棱烂,我是刑警寧澤租漂,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站颊糜,受9級(jí)特大地震影響哩治,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衬鱼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一业筏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟赫,春花似錦蒜胖、人聲如沸消别。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寻狂。三九已至,卻和暖如春朋沮,著一層夾襖步出監(jiān)牢的瞬間蛇券,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工樊拓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纠亚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓骑脱,卻偏偏與公主長(zhǎng)得像菜枷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叁丧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇啤誊。這份教程提供了一個(gè)出發(fā)點(diǎn),調(diào)查企業(yè)團(tuán)隊(duì)最常見(jiàn)的Git工作流拥娄。...
    JSErik閱讀 4,372評(píng)論 2 8
  • Git分支管理 master:主分支蚊锹,當(dāng)前分支上的代碼隨時(shí)可以直接發(fā)布,并且只能通過(guò)Pull Request從其他...
    UEUEO閱讀 9,614評(píng)論 5 33
  • 凡人下凡閱讀 177評(píng)論 0 0
  • (節(jié)令詠) 文/菊 八月秋高爽氣空稚瘾, 螢光閃爍舞飛蟲(chóng)牡昆; 嫦娥奔月矇眬影, 折桂飄香夜彩虹摊欠。 佳境良時(shí)觀盛景丢烘, 云霞...
    斌之志閱讀 1,802評(píng)論 34 41