0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

git rebase和git merge的區(qū)別

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-07-05 09:54 ? 次閱讀

解決沖突

git rebase和git merge的區(qū)別

分支合并

git merge是用來合并兩個分支的。

比如:將 b 分支合并到當前分支。

同樣git rebase b,也是把 b 分支合并到當前分支

他們的 「原理」 如下:

假設你現(xiàn)在基于遠程分支"origin",創(chuàng)建一個叫"mywork"的分支。

$gitcheckout-bmyworkorigin

假設遠程分支"origin"已經(jīng)有了 2 個提交,如圖。

現(xiàn)在我們在這個分支做一些修改,然后生成兩個提交(commit)。

$vifile.txt
$gitcommit
$viotherfile.txt
$gitcommit
...

但是與此同時,有些人也在"origin"分支上做了一些修改并且做了提交了。

這就意味著"origin"和"mywork"這兩個分支各自"前進"了,它們之間"分叉"了。

在這里,你可以用"pull"命令把"origin"分支上的修改拉下來并且和你的修改合并;結果看起來就像一個新的"合并的提交"(merge commit):

但是,如果你想讓"mywork"分支歷史看起來像沒有經(jīng)過任何合并一樣,你也許可以用git rebase:

$gitcheckoutmywork

$gitrebaseorigin

這些命令會把你的"mywork"分支里的每個提交(commit)取消掉,并且把它們臨時 保存為補丁(patch)(這些補丁放到".git/rebase"目錄中),然后把"mywork"分支更新 為最新的"origin"分支,最后把保存的這些補丁應用到"mywork"分支上。

當mywork分支更新之后,它會指向這些新創(chuàng)建的提交(commit),而那些老的提交會被丟棄。如果運行垃圾收集命令(pruning garbage collection), 這些被丟棄的提交就會刪除。(請查看 git gc)

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

解決沖突

在 rebase 的過程中,也許會出現(xiàn)沖突(conflict)。在這種情況,Git 會停止 rebase 并會讓你去解決 沖突;在解決完沖突后,用git-add命令去更新這些內(nèi)容的索引(index),然后,你無需執(zhí)行git-commit,只要執(zhí)行:

$gitrebase--continue

這樣 git 會繼續(xù)應用(apply)余下的補丁。

在任何時候,你可以用--abort參數(shù)來終止 rebase 的行動,并且"mywork" 分支會回到 rebase 開始前的狀態(tài)。

$gitrebase--abort

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

git rebase和git merge的區(qū)別

現(xiàn)在我們可以看一下用合并( merge )和用 rebase 所產(chǎn)生的歷史的區(qū)別:

fb666a14-1ad3-11ee-962d-dac502259ad0.jpg

git rebase和git merge的區(qū)別

當我們使用Git log來參看 commit 時,其 commit 的順序也有所不同。

假設 C3 提交于9:00AM,C5 提交于 10:00AM,C4 提交于 11:00AM,C6 提交于 12:00AM。

對于使用 git merge 來合并所看到的 commit 的順序(從新到舊)是:C7、C6、C4、C5、C3、C2、C1。

對于使用 git rebase 來合并所看到的 commit 的順序(從新到舊)是:C7、C6‘、C5'、C4、C3、C2、C1。

因為C6'提交只是 C6 提交的克隆,C5' 提交只是 C5 提交的克隆。

從用戶的角度看使用 git rebase 來合并后所看到的commit的順序(從新到舊)是:C7、C6、C5、C4、C3、C2、C1。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    6808

    瀏覽量

    88743
  • 管理系統(tǒng)

    關注

    1

    文章

    2375

    瀏覽量

    35759
  • Git
    Git
    +關注

    關注

    0

    文章

    196

    瀏覽量

    15720

原文標題:面試官:說說git merge和git rebase的區(qū)別

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Git常用的超級實用命令

    Git作為最流行的代碼版本控制工具,基本上已經(jīng)成為了程序員的一個標配技能。無論使用GitHub,GitLib,Gitee等進行代碼托管,均基于Git。下面聊一聊開發(fā)人員必會的幾個Git技巧和團隊協(xié)作
    的頭像 發(fā)表于 10-09 17:19 ?1127次閱讀
    <b class='flag-5'>Git</b>常用的超級實用命令

    git命令的基本使用

    git config 第一次使用git或者剛安裝的git時,使用此命令設置身份Name 和 Eamail 地址。并且每次提交時會使用此信息。
    的頭像 發(fā)表于 12-11 13:53 ?873次閱讀

    開發(fā)者必備的8 個 git 小技巧

    可以做一個交互式的重建基準(rebase),用來重新組織提交。為了做到這點,你需要運行命令 git rebase -i ,這里的是你想要重寫之前的一個提交(commit)的sha1值。接下來,它將
    發(fā)表于 07-05 10:30

    Git Hooks持續(xù)集成詳解

    1.了解Git Hooks Hook是Git系統(tǒng)的本地機制,用于在諸如代碼提交(Commit)和合并(Merge)之類的操作之前或之后觸發(fā)的定制化腳本,可以把它們看作是Git的插件系統(tǒng)
    發(fā)表于 09-28 13:09 ?0次下載

    開發(fā)人員在使用Git時幾種常見錯誤

    如果你想把一個分支的修改合并到當前分支,你可以用git rebase。它和git merge區(qū)別me
    的頭像 發(fā)表于 11-08 09:17 ?2769次閱讀

    Git命令解析-merge、rebase

    維護的變更目錄。具體如何使用取決于項目合作者的一致共識。無論是merge還是rebase,都應該了解其中原理,避免危險操作,才能享受到Git諸多特性帶來的便利。
    的頭像 發(fā)表于 07-29 18:21 ?1051次閱讀
    <b class='flag-5'>Git</b>命令解析-<b class='flag-5'>merge</b>、<b class='flag-5'>rebase</b>

    Git命令解析-patch、apply、diff

    無論是merge還是rebase,都是在同一個工作目錄中協(xié)調(diào)差異,處理變更歷史。而git的另一些命令,允許開發(fā)者單獨保存,或者通過文件或郵件的方式與別人分享這些差異。
    的頭像 發(fā)表于 06-15 09:28 ?2813次閱讀

    Git是什么?Git的基本使用資料說明

      Git是什么? Git是目前世界上最先進的分布式版本控制系統(tǒng)(沒有之一)。
    發(fā)表于 05-29 17:56 ?1次下載
    <b class='flag-5'>Git</b>是什么?<b class='flag-5'>Git</b>的基本使用資料說明

    騰訊是如何使用Git?

    那么,切換到 git 來維護代碼倉庫,會對我們的日常開發(fā)造成影響嗎?答應是顯然的,首先我們需要學習 git 的基本概念與用法,然后就需要我們在具體的項目實踐過程中打磨我們的 git 使用技巧
    的頭像 發(fā)表于 08-10 15:02 ?2466次閱讀
    騰訊是如何使用<b class='flag-5'>Git</b>?

    帶你一步一步了解Git的底層原理

    作為當前世界上最強大的代碼管理工具Git相信大家都很熟悉,但據(jù)我所知有很大一批人停留在clone、commit、pull、push.。.的階段,是不是對rebase心里沒底只敢用merge? 碰見
    的頭像 發(fā)表于 05-10 17:55 ?2983次閱讀
    帶你一步一步了解<b class='flag-5'>Git</b>的底層原理

    通俗易懂的Git各指令的本質(zhì)

    0前言 作為當前世界上最強大的代碼管理工具Git相信大家都很熟悉,但據(jù)我所知有很大一批人停留在clone、commit、pull、push.。。的階段,是不是對rebase心里沒底只敢用merge
    的頭像 發(fā)表于 06-24 18:06 ?1418次閱讀

    Git引出一個經(jīng)典的算法問題:最近公共祖先

    這二者最直觀的區(qū)別就是:merge 方式合并的分支會看到很多「分叉」,而 rebase 方式合并的分支就是一條直線。但無論哪種方式,如果存在沖突,Git 都會檢測出來并讓你手動解決沖突
    的頭像 發(fā)表于 04-21 15:28 ?1354次閱讀

    Git的使用

    Git的使用
    的頭像 發(fā)表于 01-10 16:45 ?924次閱讀

    git rebase與相關git merge命令比較

    ? #前言 ??? git rebase命令經(jīng)常被認為是Git的巫術,初學者應該遠離它,但它實際上可以讓開發(fā)團隊在使用時更加輕松。今天,我們將git
    的頭像 發(fā)表于 05-26 16:22 ?834次閱讀
    <b class='flag-5'>git</b> <b class='flag-5'>rebase</b>與相關<b class='flag-5'>git</b> <b class='flag-5'>merge</b>命令比較

    Git是什么 Git介紹

    git 是什么? Git 誕生于 2005 年,是一款免費、開源、分布式版本控制系統(tǒng)。 直接記錄快照,而非差異比較 Git 和其它版本控制系統(tǒng)的主要差別在于 Git 對待數(shù)據(jù)的方式。
    的頭像 發(fā)表于 07-22 10:50 ?1737次閱讀
    <b class='flag-5'>Git</b>是什么 <b class='flag-5'>Git</b>介紹