git工作流(二) ——git分支

上篇文章已經(jīng)說(shuō)了Git簡(jiǎn)史以及Git基礎(chǔ)生真,那么這篇文章簡(jiǎn)單總結(jié)下Git分支

Git分支

為了理解 Git 分支的實(shí)現(xiàn)方式,我們需要回顧一下,
Git保存的不是文件差異或者變化量萝衩,而只是一系列文件快照.

  • Git分支
分支其實(shí)就是從某個(gè)提交對(duì)象往回看的歷史 文字描述
image
Git中的分支葡兑,本質(zhì)上就是個(gè)指向master對(duì)象的可變指針,master為默認(rèn)分支立膛,每次提交都會(huì)向前移動(dòng)
多個(gè)分支指向提交數(shù)據(jù)的歷史 文字描述
image
Git創(chuàng)建一個(gè)新分支指針從而創(chuàng)建分支揪罕,創(chuàng)建testing命令git branch testing
HEAD 指向當(dāng)前所在的分支 文字描述
image
Git因?yàn)楸4嬉粋€(gè)名為HEAD的指針,它指向正在工作中本地分支指針
git branch僅是創(chuàng)建新分支宝泵,但不會(huì)自動(dòng)切換分支中去(如圖還在master上)
HEAD 在你轉(zhuǎn)換分支時(shí)指向新的分支 文字描述
image
運(yùn)行g(shù)it checkout testingHEAD就指向testing分支了
每次提交后 HEAD 隨著分支一起向前移動(dòng) 文字描述
image
左圖是又提交一次的結(jié)果好啰,每次提交后HEAD隨著分支一起向前移動(dòng)
但master仍指向原來(lái)git checkout時(shí)所在的commit對(duì)象。再次執(zhí)行g(shù)it checkout masterHEAD才會(huì)指向master


  • Git—merge
分支的合并 — merge #1 文字描述
image
1. #53是第一滴修補(bǔ)問題的分支
git chackout -b iss53 === git branch iss53+git checkout iss53
2.假如接到緊急任務(wù)儿奶,這時(shí)候就不必花費(fèi)大力氣來(lái)復(fù)原這些修改框往,執(zhí)行g(shù)it checkout master創(chuàng)建緊急修補(bǔ)分支git checkout -b hotfix
3.hotfix分支是從master分支所在點(diǎn)分化出來(lái)的
image
1.測(cè)試成功后回到master把它合并起來(lái),然后發(fā)布服務(wù)器闯捎,命令為git checkout master git merge hotfix 合并會(huì)出現(xiàn)“Fast forward”的提示
2.因?yàn)?/strong>是master并入hotfix的直接上游椰弊,只需master指針右移動(dòng)(順著走)稱為快進(jìn)
3.合并之后,master 分支和 hotfix 分支指向同一位置
分支的合并 — merge #2 文字描述
image
1.現(xiàn)在回來(lái)處理iss53瓤鼻,完成后合并回master,不同于hotfix,開發(fā)歷史從早的地方開始分叉的
2.master->c4秉版,git額外處理為找到共同祖先C2簡(jiǎn)單三方合并
image
三方合并后的結(jié)果重新快照,并自動(dòng)創(chuàng)建指向它的提交對(duì)象C6,可以看到C6有兩個(gè)祖先
(git自動(dòng)創(chuàng)建了一個(gè)包含了合并結(jié)果的提交對(duì)象茬祷,自己裁決哪個(gè)共同祖先才是最佳合并基礎(chǔ)清焕,這和 CVS及Subversion(1.5 以后的版本不同)


  • Git—rebase
分支的合并 — rebase #1 文字描述
image
把一個(gè)分支中的修改整合到另一個(gè)分支的辦法有兩種:merge 和 rebase(衍合)
如左圖:分叉到兩個(gè)不同分支,又各自提交了更新
image
除了merge兩個(gè)分支最新的公共祖先三方合并
另外就是C3的變化補(bǔ)丁在C4中重新打一遍->衍合
有了衍合可以把分支中提交的變化移到另一個(gè)分支重放一遍
(原理:回到共同祖先祭犯,根據(jù)當(dāng)前分支(ex··)提交的對(duì)象C3,生成補(bǔ)丁然后以master最后提交的C4為新的出發(fā)點(diǎn)秸妥,逐個(gè)應(yīng)用之前準(zhǔn)備好的補(bǔ)丁文件,最后會(huì)生成一個(gè)新的合并提交對(duì)象(C3')沃粗,master成直接下游)
image
回到master進(jìn)行快進(jìn)合并
分支的合并 — rebase #2 文字描述
image
從一個(gè)特性分支里再分出一個(gè)特性分支的歷史
服務(wù)器端代碼添加功能創(chuàng)建server提C3C4->從C3增加client分支并提C8C9->回server提C10
image
將特性分支上的另一個(gè)特性分支衍合到其他分支
一次軟件發(fā)布中筛峭,我們決定先把客戶端的修改并到主線中,而暫緩并入服務(wù)端軟件的修改
git rebase --onto master server client
取出 client 分支陪每,找出 client 分支和 server 分支的共同祖先之后的變化影晓,然后把它們?cè)?master 上重演一遍
image
快進(jìn) master 分支,使之包含 client 分支的變化
git checkout master
git merge client
image
在 master 分支上衍合 server 分支
git rebase [主分支] [特性分支] 命令會(huì)先取出特性分支 server檩禾,然后在主分支 master 上重演
git rebase master server
image
最終的提交歷史
快進(jìn)主干分支 master
git checkout master && git merge server

現(xiàn)在 client 和 server 分支的變化都已經(jīng)集成到主干分支來(lái)了挂签,可以刪掉它們了
git branch -d client
git branch -d server

  • Git—rebase風(fēng)險(xiǎn)
分支的合并 — rebase的風(fēng)險(xiǎn) 文字描述
把衍合當(dāng)成一種在推送之前清理提交歷史的手段,而且僅僅衍合那些尚未公開的提交對(duì)象盼产,就沒問題饵婆。 如果衍合那些已經(jīng)公開的提交對(duì)象,并且已經(jīng)有人基于這些提交對(duì)象開展了后續(xù)開發(fā)工作的話戏售,就會(huì)出現(xiàn)叫人沮喪的麻煩


  • Git分支—遠(yuǎn)端同步
git分支 — 和遠(yuǎn)端同步 文字描述
image
如左圖箭頭中命名所示即可與遠(yuǎn)端同步



更多內(nèi)容請(qǐng)查看《幾張圖讓你徹底弄懂git工作流(三)——git深入》??

文章出處:起底Git & Pro Git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侨核,一起剝皮案震驚了整個(gè)濱河市草穆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搓译,老刑警劉巖悲柱,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異些己,居然都是意外死亡豌鸡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門段标,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涯冠,“玉大人,你說(shuō)我怎么就攤上這事逼庞∩吒” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵赛糟,是天一觀的道長(zhǎng)派任。 經(jīng)常有香客問我,道長(zhǎng)虑灰,這世上最難降的妖魔是什么吨瞎? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任痹兜,我火速辦了婚禮穆咐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘字旭。我一直安慰自己对湃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布遗淳。 她就那樣靜靜地躺著拍柒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屈暗。 梳的紋絲不亂的頭發(fā)上拆讯,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音养叛,去河邊找鬼种呐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛弃甥,可吹牛的內(nèi)容都是我干的爽室。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淆攻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阔墩!你這毒婦竟也來(lái)了嘿架?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啸箫,失蹤者是張志新(化名)和其女友劉穎耸彪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筐高,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搜囱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柑土。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜀肘。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稽屏,靈堂內(nèi)的尸體忽然破棺而出扮宠,到底是詐尸還是另有隱情,我是刑警寧澤狐榔,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布坛增,位于F島的核電站,受9級(jí)特大地震影響薄腻,放射性物質(zhì)發(fā)生泄漏收捣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一庵楷、第九天 我趴在偏房一處隱蔽的房頂上張望罢艾。 院中可真熱鬧,春花似錦尽纽、人聲如沸咐蚯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)春锋。三九已至,卻和暖如春差凹,著一層夾襖步出監(jiān)牢的瞬間期奔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工危尿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呐萌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓脚线,卻偏偏與公主長(zhǎng)得像搁胆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照渠旁,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,918評(píng)論 0 11
  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照攀例,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái)顾腊,任何一處協(xié)同...
    __silhouette閱讀 15,882評(píng)論 5 147
  • 目錄 Git 筆記系列(一)—— Git簡(jiǎn)介 Git 筆記系列(二)—— Git工作流程 Git 筆記系列(三)—...
    吃蘑菇De大灰狼閱讀 1,207評(píng)論 0 3
  • 修自他相換菩提心 親眼目睹遭受病痛粤铭、饑渴等痛苦的眾生,或者于自前觀想有一個(gè)被痛苦所逼迫的眾生杂靶,自己向外呼氣時(shí)梆惯,觀想...
    周小芳閱讀 426評(píng)論 1 1
  • 我縱身 投入星輝斑斕中 黑暗的油膩 卻將我吞噬 張開雙臂 欲將春日擁入懷中 焦灼的塵埃 卻湮沒我的熱血 我靜耳聆聽...
    墨白_z閱讀 558評(píng)論 0 3