前言
我從用git就一直用rebase,但是新的公司需要用merge命令衷笋,我不是很明白芳杏,所以查了一些資料,總結(jié)了下面的內(nèi)容,如果有什么不妥的地方爵赵,還望指正吝秕,我一定虛心學(xué)習(xí)。
merge和rebase
標(biāo)題上的兩個(gè)命令:merge和rebase都是用來合并分支的空幻。
這里不解釋rebase命令烁峭,以及兩個(gè)命令的原理,詳細(xì)解釋參考這里秕铛。
下面的內(nèi)容主要說的是兩者在實(shí)際操作中的區(qū)別约郁。
什么是分支
分支就是便于多人在同一項(xiàng)目中的協(xié)作開發(fā)。比方說:每個(gè)人開發(fā)不同的功能但两,在各自的分支開發(fā)過程中互不影響鬓梅,完成后都提交到develop分支。極大的提高了開發(fā)的效率谨湘。
合并分支
每個(gè)人創(chuàng)建一個(gè)分支進(jìn)行開發(fā)绽快,當(dāng)開發(fā)完成,需要合并到develop分支的時(shí)候悲关,就需要用到合并的命令谎僻。
什么是沖突
合并的時(shí)候,有可能會(huì)產(chǎn)生沖突寓辱。
沖突的產(chǎn)生是因?yàn)樵诤喜⒌臅r(shí)候艘绍,不同分支修改了相同的位置。所以在合并的時(shí)候git不知道那個(gè)到底是你想保留的秫筏,所以就提出疑問(沖突提醒)讓你自己手動(dòng)選擇想要保留的內(nèi)容诱鞠,從而解決沖突。
merge和rebase的區(qū)別
采用merge和rebase后这敬,git log的區(qū)別航夺,merge命令不會(huì)保留merge的分支的commit:
處理沖突的方式:
(一股腦)使用merge命令合并分支,解決完沖突崔涂,執(zhí)行g(shù)it add .和git commit -m'fix conflict'阳掐。這個(gè)時(shí)候會(huì)產(chǎn)生一個(gè)commit。
(交互式)使用rebase命令合并分支冷蚂,解決完沖突缭保,執(zhí)行g(shù)it add .和git rebase --continue,不會(huì)產(chǎn)生額外的commit蝙茶。這樣的好處是艺骂,‘干凈’,分支上不會(huì)有無意義的解決分支的commit隆夯;壞處钳恕,如果合并的分支中存在多個(gè)commit别伏,需要重復(fù)處理多次沖突。
git pull和git pull --rebase區(qū)別:git pull做了兩個(gè)操作分別是‘獲取’和合并忧额。所以加了rebase就是以rebase的方式進(jìn)行合并分支厘肮,默認(rèn)為merge。
git merge和git merge --no-ff的區(qū)別
1宙址、我自己嘗試merge命令后轴脐,發(fā)現(xiàn):merge時(shí)并沒有產(chǎn)生一個(gè)commit。不是說merge時(shí)會(huì)產(chǎn)生一個(gè)merge commit嗎抡砂?
注意:只有在沖突的時(shí)候大咱,解決完沖突才會(huì)自動(dòng)產(chǎn)生一個(gè)commit。
如果想在沒有沖突的情況下也自動(dòng)生成一個(gè)commit注益,記錄此次合并就可以用:git merge --no-ff命令碴巾,下面用一張圖來表示兩者的區(qū)別:
2、如果不加 --no-ff 則被合并的分支之前的commit都會(huì)被抹去丑搔,只會(huì)保留一個(gè)解決沖突后的 merge commit厦瓢。
如何選擇合并分支的方式
我的理解:主要是看那個(gè)命令用的熟練,能夠有效的管理自己的代碼啤月;還有就是團(tuán)隊(duì)用的是那種方式煮仇。
我對(duì)于rebase比較熟悉,所以我一般都用rebase谎仲,但是現(xiàn)在的公司用的是merge --no-ff命令合并分支浙垫。所以,我在工作上就用merge郑诺,個(gè)人項(xiàng)目就用rebase夹姥。
也可以兩者結(jié)合:
獲取遠(yuǎn)程項(xiàng)目中最新代碼時(shí):git pull --rebase,這個(gè)時(shí)隱性的合并遠(yuǎn)程分支的代碼不會(huì)產(chǎn)生而外的commit(但是如果存在沖突的commit太多就像上面說的辙诞,需要處理很多遍沖突)辙售。
合并到分支的時(shí)候:git merge --no-ff,自動(dòng)一個(gè)merge commit飞涂,便于管理(這看管理人員怎么認(rèn)為了)
總結(jié)
看懂上面的兩幅圖就行了旦部。
commit log的區(qū)別
處理沖突的方式
參考