站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        git rebase是什么意思

        git rebase的意思為:重新定義分支的版本庫狀態(tài);當(dāng)執(zhí)行rebase操作時(shí),git會從兩個(gè)分支的共同祖先開始提取待變基分支上的修改,然后將待變基分支指向基分支的最新提交,最后將剛才提取的修改應(yīng)用到基分支的最新提交的后面。

        git rebase是什么意思

        本教程操作環(huán)境:Windows7系統(tǒng)、Git2.30.0版、Dell G3電腦。

        git rebase,顧名思義,就是重新定義(re)起點(diǎn)(base)的作用,即重新定義分支的版本庫狀態(tài)。

        一、提交節(jié)點(diǎn)圖解

        首先通過簡單的提交節(jié)點(diǎn)圖解感受一下rebase在干什么

        兩個(gè)分支master和feature,其中feature是在提交點(diǎn)B處從master上拉出的分支

        master上有一個(gè)新提交M,feature上有兩個(gè)新提交C和D

        git rebase是什么意思
        此時(shí)切換到feature分支上,執(zhí)行如下命令,相當(dāng)于是想要把master分支合并到feature分支

        git checkout feature git rebase master  //這兩條命令等價(jià)于git rebase master feature

        下圖為變基后的提交節(jié)點(diǎn)圖,解釋一下其工作原理:

        git rebase是什么意思

        • feature:待變基分支、當(dāng)前分支
        • master:基分支、目標(biāo)分支

        官方解釋:當(dāng)執(zhí)行rebase操作時(shí),git會從兩個(gè)分支的共同祖先開始提取待變基分支上的修改,然后將待變基分支指向基分支的最新提交,最后將剛才提取的修改應(yīng)用到基分支的最新提交的后面。

        結(jié)合例子解釋:當(dāng)在feature分支上執(zhí)行g(shù)it rebase master時(shí),git會從master和featuer的共同祖先B開始提取feature分支上的修改,也就是C和D兩個(gè)提交,先提取到。然后將feature分支指向master分支的最新提交上,也就是M。最后把提取的C和D接到M后面,但這個(gè)過程是刪除原來的C和D,生成新的C’和D’,他們的提交內(nèi)容一樣,但commit id不同。feature自然最后也是指向D’。

        通俗解釋(重要!):rebase,變基,可以直接理解為改變基底。feature分支是基于master分支的B拉出來的分支,feature的基底是B。而master在B之后有新的提交,就相當(dāng)于此時(shí)要用master上新的提交來作為feature分支的新基底。實(shí)際操作為把B之后feature的提交存下來,然后刪掉原來這些提交,再找到master的最新提交位置,把存下來的提交再接上去(新節(jié)點(diǎn)新commit id),如此feature分支的基底就相當(dāng)于變成了M而不是原來的B了。

        其中還有一句解釋也很直白,rebase 命令其實(shí)關(guān)鍵在于理解「基」,git rebase <基分支>,就是將基分支與當(dāng)前分支的差異提交(分岔點(diǎn)之后)獲取到,然后在「基分支」最新提交點(diǎn)后面將差異提交逐個(gè)再次提交,最后將當(dāng)前分支的 HEAD 指針指向最新的提交點(diǎn)


        二、實(shí)際git提交示例

        按照上面的圖解構(gòu)造了提交記錄,如下圖所示:(ABM是master分支線,ABCD是feature分支線。這里畫成了master變色分叉出來,這不影響理解,知道是表示兩個(gè)分支兩條線即可!)

        git rebase是什么意思
        此時(shí),在feature分支上執(zhí)行g(shù)it rebase master

        變基完成以后,ABCD是原來的feature分支線,ABMC’D’是新的feature分支線,ABM是master分支線(沒有變化)

        git rebase是什么意思


        三、推薦使用場景

        搞來搞去那么多,這其實(shí)是最重要的。不同公司,不同情況有不同使用場景,不過大部分情況推薦如下:

        • 拉公共分支最新代碼的時(shí)候使用rebase,也就是git pull -r或git pull –rebase,但有個(gè)缺點(diǎn)就是rebase以后我就不知道我的當(dāng)前分支最早是從哪個(gè)分支拉出來的了,因?yàn)榛鬃兞寺铩#ㄈ绻褂胢erge,多出無意義的一條提交記錄“Merge … to …”)

        • 往公共分支上合代碼的時(shí)候,使用merge。(如果使用rebase,那么其他開發(fā)人員想看主分支的歷史,就不是原來的歷史了,歷史已經(jīng)被你篡改了)

        推薦學(xué)習(xí):《Git教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 亚洲国产成人精品无码区在线观看| 国精品无码一区二区三区左线| 亚洲精品国偷自产在线| 精品国产麻豆免费人成网站| 亚洲av永久无码精品国产精品| 911亚洲精品不卡| 91精品国产综合久久精品| 最新精品国偷自产在线| 国产精品成人免费观看| 日韩精品在线看| 精品视频一区二区三区在线观看 | 久久se精品一区二区| 精品黑人一区二区三区| 中文字幕乱码中文乱码51精品| 精品视频一区二区三区| 国产精品你懂的在线播放| 91久久精品国产成人久久| 欧美一区二区精品系列在线观看| 国产国产精品人在线视| 91精品免费久久久久久久久| 久久精品国产精品亚洲精品| 亚洲精品NV久久久久久久久久| 国産精品久久久久久久| 国产L精品国产亚洲区久久| 九九热在线精品视频| 97精品人妻系列无码人妻| 久久丫精品国产亚洲av| 人妻精品久久久久中文字幕69 | 隔壁老王国产在线精品| 日韩欧美精品不卡| 亚洲日本精品一区二区| 一区二区三区四区精品视频| 老司机69精品成免费视频| 青青草国产精品| 国产韩国精品一区二区三区| 国产在线观看一区精品| 久久久久一级精品亚洲国产成人综合AV区 | 国产精品久久网| 国产欧美久久久精品| 伊人久久大香线蕉精品| 国产精品亚洲视频|