Git 入門系列(三)- 分支(上)創(chuàng)建與切換 / 合并 / 查看 / 刪除

本篇星爪,我們說說分支,分支可是個好東西

小王正在開發(fā) 功能1曾掂,然后開發(fā) 功能 6惫谤,開發(fā)了一部分,然后測試反饋 功能 1 有問題啊珠洗,小王要 fix 功能1溜歪,可 feature6 還沒完呢,完了運行不起來……

先把代碼注釋掉许蓖?注釋后蝴猪,再修改富岳,影響到了本來的功能怎么辦?一點都不智能拯腮,在 Git 版本管理中窖式,分支(branch)就可以完美解決這個困擾。

分支是什么动壤?
其實每次提交萝喘,Git 都會把它們串成一條時間線,到目前為止琼懊,只有一條時間線阁簸,在 Git 里這條線就是主分支,也就是 master 分支哼丈。

用分支來處理上述情境會是怎樣呢

  • Step 1:在開發(fā)新功能之前先創(chuàng)建一個分支启妹,比如就叫 feat_6,用來開發(fā) 功能 6
  • Step 2:在 feat_6 分支開發(fā) 新功能
  • Step 3:測試說 功能 1 有個 bug醉旦,那么可以先把開發(fā)的功能提交到 feat_6 上
  • Setp 4:切換分支到 主分支(有 功能 1 的分支)饶米,修復(fù) bug 并提交
  • Step 5:提交完成后,可以回到 feat_6 繼續(xù)開發(fā)新功能

分支的創(chuàng)建與切換

新建并切換车胡, 使用git checkout -b <new_branch>

Step 1: 假設(shè)當(dāng)前 master 指向 C2 (最新一次 commit )檬输,現(xiàn)在在 C2 這個節(jié)點創(chuàng)建一個新分支 feat_6 并切換,那么新的分支也會指向 C2

創(chuàng)建 feat_6 分支并切換 git checkout -b feat_6


可以看到當(dāng)前的分支已經(jīng)從 master 切換到了 feat_6 (工作區(qū)間地址后面藍(lán)色字標(biāo)識的就是當(dāng)前分支)
此時 master 和 feat_6 兩個分支的內(nèi)容完全一樣的


擴展理解

在前面我們提到過 HEAD 比如 git reset HEAD^這個 HEAD匈棘,可以理解成 HEAD 指向當(dāng)前分支丧慈,而 Git 用分支指向最新提交
當(dāng)前 master 和 feat_6 都指向最新提交 C2,在 feat_6 分支上主卫,HEAD 就指向 feat_6

Step 2~3: 繼續(xù)在新分支上開發(fā)功能逃默,在該分支功能提交后(C3),這個分支的指針也會向最新內(nèi)容推進

在 feat_6 分支上新建一個 feat_6.txt簇搅, 并提交完域,此時 HEAD 也會指向 feat_6 分支,而 feat_6 指向最新提交馍资。(在初始使用過程中筒主,可以先忽略 HEAD 的概念)

為什么要先提交?
如果沒有提交鸟蟹,修改的文件會留在工作區(qū)或者暫存區(qū)里,那么這些還沒有提交的修改使兔,會和你在即將檢出(checkout)的分支產(chǎn)生沖突而阻止 Git 為你切換分支建钥,所以切換分支之前最好保證當(dāng)前的分支干凈(工作區(qū)或暫存區(qū)里沒有修改的文件)

  • 在實際操作過程中,你會發(fā)現(xiàn)有時工作區(qū)和暫存區(qū)存在文件虐沥,也可以成功切換熊经,而且這些文件會一起保留到當(dāng)前分支
  • 假設(shè) 在建立 feat_6 之后泽艘,在 master 分支有人修改了 test 文件,feat_6 也修改了 test 文件镐依,此時 feat_6 沒有提交匹涮,在切換分支時,就會有類似如下提示



    提示先 commit 或者 stash槐壳, commit 就是提交然低,stash 是 繞過 commit 方法來處理,后續(xù)學(xué)習(xí)

Step 4~5: 切換到 master 分支务唐,來修復(fù) 功能1 的 bug雳攘,使用git checkout <branch>, 切換到 master 分支就是git checkout master(這里要和上一篇的 checkout 用法區(qū)別開)

那么此時的工作目錄中你的內(nèi)容就是 C2(在實例中枫笛,master 分支沒有 feat_6.txt)吨灭,和創(chuàng)建分支之前的內(nèi)容是一樣的,可以進行 fix刑巧,提交后喧兄,再回到 feat_6 繼續(xù)開發(fā)

實際場景的推薦處理方式:

如果在實際工作中,真的遇到了 bug 需要 fix啊楚,問題嚴(yán)重的建議再創(chuàng)建一個分支來修復(fù)繁莹,待修復(fù)完成后,再合并到主分支中特幔,以免影響到其他功能的驗收

比如咨演,創(chuàng)建這個分支名為 hotfix,并提交了修復(fù)的文件(C4)蚯斯,那分支走向如下圖


創(chuàng)建 hotfix 分支薄风,提交就不做逐步演示了,可以動手操作下


合并分支

不管是在 hotfix 修復(fù)問題拍嵌,還是在 feat_6 開發(fā)功能遭赂,最后測試后都要合并到主分支里,項目算完整横辆。
先回到主分支撇他,再使用git merge命令來進行合并

git merge <branch> 合并指定分支到當(dāng)前分支

git checkout master
git merge hotfix

可以看到 master 分支有了剛剛 fix 的內(nèi)容(fix_feat_1.txt)
注意到上面的 Fast-forward 信息,Git 告訴我們狈蚤,這次合并是“快進模式”困肩,也就是直接把 master 指向 hotfix 的當(dāng)前提交,不存在任何需要解決的分歧脆侮。


合并之后 master 分支和 hotfix 分支指向同一位置锌畸。

查看分支

隨著分支的增多,可以通過 git branch查看本地分支靖避,星號指向綠色分支是當(dāng)前分支
git branch -a添加 -a 參數(shù)可以查看遠(yuǎn)程分支潭枣,遠(yuǎn)程分支會用紅色表示出來

刪除分支

在 完成 bug 修復(fù)之后 并且 master 也合并了 hotfix比默,hotfix 就可以刪掉了。
使用git branch -d <branch> 執(zhí)行刪除操作
git branch -d hotfix (這個操作是在非 hotfix 操作的盆犁,示例中是在 master 分支命咐,自己不能刪除自己),再查看一下谐岁,hotfix 已經(jīng)不在分支列表中了

本篇先到這里醋奠,后面繼續(xù)介紹分支,來處理 feat_6 分支的內(nèi)容翰铡,和遇到的問題钝域。
最后回顧下知識點

  • git branch -b <new_branch>創(chuàng)建并切換分支
  • git branch <branch>切換分支
  • git merge <branch> 合并分支到當(dāng)前分支
  • git branch 查看本地分支
  • git branch -a 查看本地和遠(yuǎn)程分支
  • git branch -d <branch>刪除分支

系列文章傳送門

Git 入門系列(一)- Git 概念/安裝/基本操作/遠(yuǎn)程推送更新
Git 入門系列(二)- 修改管理 / 撤銷操作 / 命令及區(qū)間關(guān)系
Git 入門系列(三)- 分支(上)創(chuàng)建與切換 / 合并 / 查看 / 刪除
Git 入門系列(四)- 分支(下)合并解決沖突 / 遠(yuǎn)程分支
Git 入門系列(五)- stash 貯藏
Git 入門系列(六)- 標(biāo)簽 tag
Git 入門系列(七)- 可視化 Git 管理工具
Git 入門系列(八) - FAQ

歡迎關(guān)注個人公眾號,【程序媛春哥的手記】


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锭魔,一起剝皮案震驚了整個濱河市例证,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迷捧,老刑警劉巖织咧,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漠秋,居然都是意外死亡笙蒙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門庆锦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捅位,“玉大人,你說我怎么就攤上這事搂抒⊥Р螅” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵求晶,是天一觀的道長焰雕。 經(jīng)常有香客問我,道長芳杏,這世上最難降的妖魔是什么矩屁? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮爵赵,結(jié)果婚禮上吝秕,老公的妹妹穿的比我還像新娘。我一直安慰自己亚再,他們只是感情好郭膛,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氛悬,像睡著了一般则剃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上如捅,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天棍现,我揣著相機與錄音,去河邊找鬼镜遣。 笑死己肮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悲关。 我是一名探鬼主播谎僻,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寓辱!你這毒婦竟也來了艘绍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤秫筏,失蹤者是張志新(化名)和其女友劉穎诱鞠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體这敬,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡航夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了崔涂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳掐。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冷蚂,靈堂內(nèi)的尸體忽然破棺而出缭保,到底是詐尸還是另有隱情,我是刑警寧澤帝雇,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布涮俄,位于F島的核電站,受9級特大地震影響尸闸,放射性物質(zhì)發(fā)生泄漏彻亲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一吮廉、第九天 我趴在偏房一處隱蔽的房頂上張望苞尝。 院中可真熱鬧,春花似錦宦芦、人聲如沸宙址。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抡砂。三九已至大咱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間注益,已是汗流浹背碴巾。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丑搔,地道東北人厦瓢。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像啤月,于是被迫代替她去往敵國和親煮仇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

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

  • 分支簡介 Git 保存的不是文件的變化或者差異绞呈,而是一系列不同時刻的文件快照。 當(dāng)使用git commit進行提交...
    哪個鹿閱讀 3,869評論 0 2
  • 一间景、 Git 分支簡介 幾乎所有的版本控制系統(tǒng)都以某種形式支持分支佃声。 使用分支意味著你可以把你的工作從開發(fā)主線上分...
    常大鵬閱讀 2,943評論 2 41
  • 原文推薦: A successful Git branching model 這個文章講的是Git分支模型的原理及...
    SonyaBaby閱讀 1,498評論 0 0
  • 一、基本概念: 注:對于git的分布式概念及其優(yōu)點倘要,不重復(fù)說明圾亏,自己百度或谷歌。本文中涉及到指令前面有$的封拧,在cm...
    大廠offer閱讀 1,415評論 0 3
  • 分支的新建與合并 讓我們來看一個簡單的分支新建與分支合并的例子志鹃,實際工作中你可能會用到類似的工作流。 你將經(jīng)歷如下...
    vb12閱讀 728評論 0 0