Gitの分支管理/BUG分支 day05

分支管理策略

合并分支時(shí),如果可能,Git會(huì)用Fast forward模式捷泞,但這種模式下家卖,刪除分支后,會(huì)丟掉分支信息。

如果要強(qiáng)制禁用Fast forward模式面哥,Git就會(huì)在merge時(shí)生成一個(gè)新的commit哎壳,這樣,從分支歷史上就可以看出分支信息尚卫。

下面我們實(shí)戰(zhàn)一下--no-ff方式的git merge

首先归榕,仍然創(chuàng)建并切換dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

修改readme.txt文件,并提交一個(gè)新的commit

$ git add readme.txt
$ git commit -m "add merge"
[dev f52c633] add merge
 1 file changed, 1 insertion(+)

現(xiàn)在吱涉,我們切換回master

$ git checkout master
Switched to branch 'master'

準(zhǔn)備合并dev分支刹泄,請(qǐng)注意--no-ff參數(shù),表示禁用Fast forward

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

因?yàn)楸敬魏喜⒁獎(jiǎng)?chuàng)建一個(gè)新的commit怎爵,所以加上-m參數(shù)特石,把commit描述寫進(jìn)去。

合并后鳖链,我們用git log看看分支歷史:

$ git log --graph --pretty=oneline --abbrev-commit
*   e1e9c68 (HEAD -> master) merge with no-ff
|\  
| * f52c633 (dev) add merge
|/  
*   cf810e4 conflict fixed
...

可以看到姆蘸,不使用Fast forward模式,merge后就像這樣:

分支結(jié)構(gòu)圖
  • 團(tuán)隊(duì)合作的分支策略

在實(shí)際開發(fā)中芙委,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:

  1. master分支應(yīng)該是非常穩(wěn)定的逞敷,也就是僅用來發(fā)布新版本,平時(shí)不能在上面干活灌侣;

  2. 那在哪干活呢推捐?干活都在dev分支上,也就是說顶瞳,dev分支是不穩(wěn)定的玖姑,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí)慨菱,再把dev分支合并到master上焰络,在master分支發(fā)布1.0版本;

  3. 你和你的小伙伴們每個(gè)人都在dev分支上干活符喝,每個(gè)人都有自己的分支闪彼,時(shí)不時(shí)地往dev分支上合并就可以了。

所以协饲,團(tuán)隊(duì)合作的分支看起來就像這樣:


團(tuán)隊(duì)合作開發(fā)的分支結(jié)構(gòu)圖

小結(jié)

Git分支十分強(qiáng)大畏腕,在團(tuán)隊(duì)開發(fā)中應(yīng)該充分應(yīng)用。

合并分支時(shí)茉稠,加上--no-ff參數(shù)就可以用普通模式合并描馅,合并后的歷史有分支,能看出來曾經(jīng)做過合并而线,而fast forward合并就看不出來曾經(jīng)做過合并铭污。


Bug分支

當(dāng)你接到一個(gè)修復(fù)一個(gè)代號(hào)101的bug的任務(wù)時(shí)恋日,很自然地,你想創(chuàng)建一個(gè)分支issue-101來修復(fù)它嘹狞,但是岂膳,等等,當(dāng)前正在dev上進(jìn)行的工作還沒有提交:

$ git status
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

并不是你不想提交磅网,而是工作只進(jìn)行到一半谈截,還沒法提交,預(yù)計(jì)完成還需1天時(shí)間涧偷。但是簸喂,必須在兩個(gè)小時(shí)內(nèi)修復(fù)該bug,怎么辦燎潮?

幸好娘赴,Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場“儲(chǔ)藏”起來跟啤,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

現(xiàn)在,用git status查看工作區(qū)唉锌,就是干凈的(除非有沒有被Git管理的文件)隅肥,因此可以放心地創(chuàng)建分支來修復(fù)bug。

首先確定要在哪個(gè)分支上修復(fù)bug袄简,假定需要在master分支上修復(fù)腥放,就從master創(chuàng)建臨時(shí)分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git checkout -b issue-101
Switched to a new branch 'issue-101'

現(xiàn)在修復(fù)bug,需要把“Git is free software ...”改為“Git is a free software ...”绿语,然后提交:

$ git add readme.txt
$ git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)

修復(fù)完成后秃症,切換到master分支,并完成合并吕粹,最后刪除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

太棒了种柑,原計(jì)劃兩個(gè)小時(shí)的bug修復(fù)只花了5分鐘!現(xiàn)在匹耕,是時(shí)候接著回到dev分支干活了聚请!

$ git checkout dev
Switched to branch 'dev'
$ git status
On branch dev
nothing to commit, working tree clean

工作區(qū)是干凈的,剛才的工作現(xiàn)場存到哪去了稳其?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

工作現(xiàn)場還在驶赏,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下既鞠,有兩個(gè)辦法:

  1. git stash apply恢復(fù)煤傍,但是恢復(fù)后,stash內(nèi)容并不刪除嘱蛋,你需要用git stash drop來刪除蚯姆;

  2. git stash pop五续,恢復(fù)的同時(shí)把stash內(nèi)容也刪了:

$ git stash pop
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何stash內(nèi)容了:

$ git stash list

你可以多次stash蒋失,恢復(fù)的時(shí)候返帕,先用git stash list查看,然后恢復(fù)指定的stash篙挽,用命令:

$ git stash apply stash@{0}

小結(jié)

  1. 修復(fù)bug時(shí)荆萤,我們會(huì)通過創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并铣卡,最后刪除链韭;

  2. 當(dāng)手頭工作沒有完成時(shí),先把工作現(xiàn)場git stash一下煮落,然后去修復(fù)bug敞峭,修復(fù)后,再git stash pop蝉仇,回到工作現(xiàn)場旋讹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市轿衔,隨后出現(xiàn)的幾起案子沉迹,更是在濱河造成了極大的恐慌,老刑警劉巖害驹,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞭呕,死亡現(xiàn)場離奇詭異,居然都是意外死亡宛官,警方通過查閱死者的電腦和手機(jī)葫松,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底洗,“玉大人腋么,你說我怎么就攤上這事〖纤。” “怎么了党晋?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長徐块。 經(jīng)常有香客問我未玻,道長,這世上最難降的妖魔是什么胡控? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任扳剿,我火速辦了婚禮,結(jié)果婚禮上昼激,老公的妹妹穿的比我還像新娘庇绽。我一直安慰自己锡搜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布瞧掺。 她就那樣靜靜地躺著耕餐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辟狈。 梳的紋絲不亂的頭發(fā)上肠缔,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音哼转,去河邊找鬼明未。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壹蔓,可吹牛的內(nèi)容都是我干的趟妥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼佣蓉,長吁一口氣:“原來是場噩夢啊……” “哼披摄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勇凭,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤行疏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后套像,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡终息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年夺巩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片周崭。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柳譬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出续镇,到底是詐尸還是另有隱情美澳,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布摸航,位于F島的核電站制跟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏酱虎。R本人自食惡果不足惜雨膨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望读串。 院中可真熱鬧聊记,春花似錦撒妈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舆床,卻和暖如春棋蚌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峭弟。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工附鸽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞒瘸。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓坷备,卻偏偏與公主長得像,于是被迫代替她去往敵國和親情臭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子省撑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 本系列教程來自廖雪峰的官方網(wǎng)站,現(xiàn)在搬運(yùn)過來,目的幫助自己和小白學(xué)習(xí)收藏!附贈(zèng):常用git命令清單 目錄 前言 創(chuàng)...
    Blizzard_liu閱讀 1,133評(píng)論 0 4
  • 分支管理 分支就是科幻電影里面的平行宇宙,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時(shí)候俯在,另一個(gè)你正在另一個(gè)平行宇宙里努力學(xué)習(xí)...
    bo_song閱讀 708評(píng)論 0 1
  • 遠(yuǎn)程倉庫 到目前為止竟秫,我們已經(jīng)掌握了如何在Git倉庫里對(duì)一個(gè)文件進(jìn)行時(shí)光穿梭,你再也不用擔(dān)心文件備份或者丟失的問題...
    歸云丶閱讀 1,958評(píng)論 0 5
  • 分支管理 git的分支是git能如此受到人們喜愛很重要的一個(gè)原因跷乐,下邊就聊聊git中的分支肥败。 什么是分支 你每次c...
    大喵愛讀書閱讀 631評(píng)論 0 1
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么愕提? Git是目前世界上最先...
    橫渡閱讀 3,946評(píng)論 3 27