Git自學成才——git merge

概念

git merge 和 git rebase 是使用率非常高的兩條指令
本文對git merge的日常使用場景做一個梳理匆绣,git rebase請看 Git自學成才——rebase完整版

假設我有一個開發(fā)分支dev牙肝,有一個主干分支master

關于哪個分支合并到哪個分支级及,很多人會有混淆和困惑英上。其實韩脏,你需要往哪個分支上面合并疚漆,就要切換到哪個分支

比如夭苗,現(xiàn)在要 把dev分支merge到master分支

首先翼悴,保證兩個分支都是最新的狀態(tài)

切換到master分支缚够,執(zhí)行merge操作

git checkout master
git merge dev

git merge 命令用于合并指定分支到當前分支

基礎

上面是最基本的git merge幔妨,git merge默認采用快進(fast-forward)的方式,產(chǎn)生類似如下的log

Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++

何為 快進(Fast-forward)谍椅?

在合并的時候误堡,你應該注意到了"快進(fast-forward)"這個詞。 由于當前 master 分支所指向的提交是你當前提交(有關 hotfix 的提交)的直接上游雏吭,所以 Git 只是簡單的將指針向前移動锁施。 換句話說,當你試圖合并兩個分支時杖们,如果順著一個分支走下去能夠到達另一個分支悉抵,那么 Git 在合并兩者的時候,只會簡單的將指針向前推進(指針右移)摘完,因為這種情況下的合并操作沒有需要解決的分歧——這就叫做 “快進(fast-forward)”姥饰。

如果merge的時候沒有沖突,沒有新的commit節(jié)點產(chǎn)生孝治,只是移動分支的指針列粪,來實現(xiàn)merge

如果merge的時候有沖突,產(chǎn)生類似如下的log

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

需要手動解決沖突荆秦,然后執(zhí)行add篱竭,再commit

git add index.html 
git commit -m "conflict fixed Your message..."

實戰(zhàn)

基本知識了解完,來看一下實戰(zhàn)中的三種操作

無節(jié)點merge

很多公司或者組織會大量使用分支步绸,他們不喜歡在master分支看到錯綜復雜的merge節(jié)點掺逼,所以他們的要求是無節(jié)點的merge(看起來所有的commit都是一條直線),這樣的視覺效果清晰可讀性很強瓤介。

實現(xiàn)無節(jié)點merge吕喘,其實是用到merge指令的默認特性——快進(Fast-forward),因為快進方式的merge不會產(chǎn)生節(jié)點刑桑,只會移動分支的HEAD指針氯质。

問題是,快進的特性是在沒有沖突的情況下產(chǎn)生祠斧,而執(zhí)行merge大概率的情況會有很多沖突闻察。這里搭配rebase變基操作更加合適,具體的rebase操作請看 Git自學成才——rebase完整版

完成rebase操作之后琢锋,在master分支上執(zhí)行

git merge dev

...
Fast-forward
...

你會在SourceTree里看看master分支已經(jīng)包含了dev分支的commit辕漂,并且是一條直線

有節(jié)點merge

另外一些情況,被要求所有的merge操作必須要保留節(jié)點

如果merge有沖突吴超,手動解決完沖突后钉嘹,add 沖突的文件,再commit鲸阻,這樣已經(jīng)產(chǎn)生了一個merge節(jié)點跋涣。

如果要求強制產(chǎn)生merge節(jié)點缨睡,使用 --no-ff 參數(shù)告訴merge,我們不需要快進(no-ff : no fast forward)

git merge --no-ff -m "merged dev" dev

這樣會產(chǎn)生一個 “merged dev” 的commit節(jié)點

單節(jié)點merge

在某些情況下陈辱,需要我們的merge只產(chǎn)生一個commit節(jié)點

這時奖年,我們需要壓扁參數(shù)squash(可以理解為壓縮提交),squash和no-ff非常類似沛贪,區(qū)別是不會保留對合入分支的引用拾并。也就是說,squash把dev分支的代碼壓縮在一起鹏浅,在master分支只提交一次。

git merge --squash dev
git commit –m "squash dev"

這樣的操作會在你的master分支上只產(chǎn)生一個"squash dev"節(jié)點(包含了dev分支上的多個commit內(nèi)容)

以上三種merge方式基本涵蓋了日常實戰(zhàn)的場景屏歹,一圖以蔽之

merge.png

更多內(nèi)容請參考官方手冊
Git 分支 - 分支的新建與合并
git-merge

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隐砸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蝙眶,更是在濱河造成了極大的恐慌季希,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽纷,死亡現(xiàn)場離奇詭異式塌,居然都是意外死亡,警方通過查閱死者的電腦和手機友浸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門峰尝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人收恢,你說我怎么就攤上這事武学。” “怎么了伦意?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵火窒,是天一觀的道長。 經(jīng)常有香客問我驮肉,道長熏矿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任离钝,我火速辦了婚禮票编,結果婚禮上,老公的妹妹穿的比我還像新娘奈辰。我一直安慰自己栏妖,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布奖恰。 她就那樣靜靜地躺著吊趾,像睡著了一般宛裕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上论泛,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天揩尸,我揣著相機與錄音,去河邊找鬼屁奏。 笑死岩榆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坟瓢。 我是一名探鬼主播勇边,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼折联!你這毒婦竟也來了粒褒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诚镰,失蹤者是張志新(化名)和其女友劉穎奕坟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體清笨,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡月杉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抠艾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苛萎。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖跌帐,靈堂內(nèi)的尸體忽然破棺而出首懈,到底是詐尸還是另有隱情,我是刑警寧澤谨敛,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布究履,位于F島的核電站,受9級特大地震影響脸狸,放射性物質(zhì)發(fā)生泄漏最仑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一炊甲、第九天 我趴在偏房一處隱蔽的房頂上張望泥彤。 院中可真熱鬧,春花似錦卿啡、人聲如沸吟吝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剑逃。三九已至浙宜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛹磺,已是汗流浹背粟瞬。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萤捆,地道東北人裙品。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像俗或,于是被迫代替她去往敵國和親市怎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

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

  • 昨天在同事電腦上操作了一把cherry-pick代碼,發(fā)現(xiàn)很多功能不用,就慢慢忘記了,梳理了下流程圖: git c...
    gogoingmonkey閱讀 671評論 0 0
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一辛慰。 版本控制指的是焰轻,記錄每次版本變更的內(nèi)容和時間等細節(jié),保留各版本之間...
    神齊閱讀 1,431評論 0 7
  • Git 簡介 Git是目前世界上最先進的分布式版本控制系統(tǒng)昆雀,沒有之一。 勤用 git status 查看狀態(tài)和提示...
    xiaogmail閱讀 757評論 0 1
  • 朋友整理的蝠筑,放這里偶爾過來看看 一狞膘、基本介紹 首先,Git作為版本控制系統(tǒng)什乙,他的原理與SVN為首的集中式版本控制系...
    allenzhan閱讀 1,004評論 0 3
  • 開篇之前,我們來說說Git這個東西忆某。至于Git是個什么東西這種問題点待,我相信不用我說,點開這篇文章的你應該知道的弃舒。但...
    點融黑幫閱讀 4,375評論 8 66