解決沖突
git rebase和git merge的區(qū)別
分支合并
git merge是用來(lái)合并兩個(gè)分支的。
比如:將 b 分支合并到當(dāng)前分支。
同樣git rebase b,也是把 b 分支合并到當(dāng)前分支
他們的 「原理」 如下:
假設(shè)你現(xiàn)在基于遠(yuǎn)程分支"origin",創(chuàng)建一個(gè)叫"mywork"的分支。
$gitcheckout-bmyworkorigin
假設(shè)遠(yuǎn)程分支"origin"已經(jīng)有了 2 個(gè)提交,如圖。
現(xiàn)在我們?cè)谶@個(gè)分支做一些修改,然后生成兩個(gè)提交(commit)。
$vifile.txt $gitcommit $viotherfile.txt $gitcommit ...
但是與此同時(shí),有些人也在"origin"分支上做了一些修改并且做了提交了。
這就意味著"origin"和"mywork"這兩個(gè)分支各自"前進(jìn)"了,它們之間"分叉"了。
在這里,你可以用"pull"命令把"origin"分支上的修改拉下來(lái)并且和你的修改合并;結(jié)果看起來(lái)就像一個(gè)新的"合并的提交"(merge commit):
但是,如果你想讓"mywork"分支歷史看起來(lái)像沒(méi)有經(jīng)過(guò)任何合并一樣,你也許可以用git rebase:
$gitcheckoutmywork $gitrebaseorigin
這些命令會(huì)把你的"mywork"分支里的每個(gè)提交(commit)取消掉,并且把它們臨時(shí) 保存為補(bǔ)丁(patch)(這些補(bǔ)丁放到".git/rebase"目錄中),然后把"mywork"分支更新 為最新的"origin"分支,最后把保存的這些補(bǔ)丁應(yīng)用到"mywork"分支上。
當(dāng)mywork分支更新之后,它會(huì)指向這些新創(chuàng)建的提交(commit),而那些老的提交會(huì)被丟棄。如果運(yùn)行垃圾收集命令(pruning garbage collection), 這些被丟棄的提交就會(huì)刪除。(請(qǐng)查看 git gc)
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
視頻教程:https://doc.iocoder.cn/video/
解決沖突
在 rebase 的過(guò)程中,也許會(huì)出現(xiàn)沖突(conflict)。在這種情況,Git 會(huì)停止 rebase 并會(huì)讓你去解決 沖突;在解決完沖突后,用git-add命令去更新這些內(nèi)容的索引(index),然后,你無(wú)需執(zhí)行g(shù)it-commit,只要執(zhí)行:
$gitrebase--continue
這樣 git 會(huì)繼續(xù)應(yīng)用(apply)余下的補(bǔ)丁。
在任何時(shí)候,你可以用--abort參數(shù)來(lái)終止 rebase 的行動(dòng),并且"mywork" 分支會(huì)回到 rebase 開(kāi)始前的狀態(tài)。
$gitrebase--abort
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
視頻教程:https://doc.iocoder.cn/video/
git rebase和git merge的區(qū)別
現(xiàn)在我們可以看一下用合并( merge )和用 rebase 所產(chǎn)生的歷史的區(qū)別:

git rebase和git merge的區(qū)別
當(dāng)我們使用Git log來(lái)參看 commit 時(shí),其 commit 的順序也有所不同。
假設(shè) C3 提交于9:00AM,C5 提交于 10:00AM,C4 提交于 11:00AM,C6 提交于 12:00AM。
對(duì)于使用 git merge 來(lái)合并所看到的 commit 的順序(從新到舊)是:C7、C6、C4、C5、C3、C2、C1。
對(duì)于使用 git rebase 來(lái)合并所看到的 commit 的順序(從新到舊)是:C7、C6‘、C5'、C4、C3、C2、C1。
因?yàn)镃6'提交只是 C6 提交的克隆,C5' 提交只是 C5 提交的克隆。
從用戶的角度看使用 git rebase 來(lái)合并后所看到的commit的順序(從新到舊)是:C7、C6、C5、C4、C3、C2、C1。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94755 -
管理系統(tǒng)
+關(guān)注
關(guān)注
1文章
2921瀏覽量
38568 -
Git
+關(guān)注
關(guān)注
0文章
207瀏覽量
16930
原文標(biāo)題:面試官:說(shuō)說(shuō)git merge和git rebase的區(qū)別
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Git常用的超級(jí)實(shí)用命令
git命令的基本使用
開(kāi)發(fā)者必備的8 個(gè) git 小技巧
Git Hooks持續(xù)集成詳解
開(kāi)發(fā)人員在使用Git時(shí)幾種常見(jiàn)錯(cuò)誤
Git命令解析-merge、rebase
Git命令解析-patch、apply、diff
Git是什么?Git的基本使用資料說(shuō)明
為什么說(shuō)Git把SVN拍在沙灘上了呢?
帶你一步一步了解Git的底層原理
通俗易懂的Git各指令的本質(zhì)
Git引出一個(gè)經(jīng)典的算法問(wèn)題:最近公共祖先
git rebase與相關(guān)git merge命令比較
Git是什么 Git介紹
git rebase和git merge的區(qū)別
評(píng)論