1. 合并分支用rebase還是merge?

        共 1278字,需瀏覽 3分鐘

         ·

        2024-04-10 18:07

            


        bdf6ed3d6eb04e5e31ec53f830263155.webp


        實(shí)際開發(fā)工作的時候,我們都是在自己的分支開發(fā),然后將自己的分合并到主分支,那合并分支用2種操作,這2種操作有什么區(qū)別呢?

        git上新建一個項(xiàng)目,默認(rèn)是有master分支的,將項(xiàng)目克隆到本地,我們的準(zhǔn)備工作就完成了

        ff8c9d757501664d97fad6cc66e72c03.webp

        同學(xué)A:

        執(zhí)行g(shù)it log ,可以看到有一個提交記錄,是初始化提交

        825285763c3a3c905e0773c91321695c.webp新增一個文件a.txt, 再次查看我們的提交記錄,有2條提交記錄了

        c6f38eebc9dec9c861d3bd7bb7a3e11e.webp

        這個時候?qū)⒈镜匦耤ommit的記錄push到遠(yuǎn)程倉庫,就可以看到我們的2次提交了

        a132edf3f5011d7359680e0d3e232d10.webp

        同學(xué)B:

        同學(xué)B在已經(jīng)有提交記錄的master分支上,檢出分支dev,并將分支推送到遠(yuǎn)程分支,并進(jìn)行自己的開發(fā)

        a7746299e24ff2afe3d8a930110ac007.webp

        查看遠(yuǎn)程倉庫,多了一個dev分支

        6880514c5543af24ef445cf18c663217.webp

        此時的git分支類圖是這樣的

        ec26a71a1fbd9902a65ec76eb7fe5801.webp

        此時B同學(xué)開始進(jìn)行開發(fā),完成了自己的3次提交工作,使用git log 看一下

        6b3d928391478a0a5b24a6c35f53817f.webp此時git的分支類圖是這樣子的

        67c4e8addcc2d6c5e56a7726d62ee266.webp

        重點(diǎn)

        現(xiàn)在有這樣一個現(xiàn)實(shí)的請況,就是B同學(xué)準(zhǔn)備進(jìn)行第4次提交的時候,同學(xué)A在master主分支上進(jìn)行了一次提交,master的提交已經(jīng)向前走了

        此時的git分支類圖是這樣的

        6f2ae23e79f3b4e951322b6102e826cb.webp此時我們知道B同學(xué)開發(fā)的dev分支是基于C2提交點(diǎn)切出來的,而這個時候master分支已經(jīng)被更新了

        如果B同學(xué)開發(fā)完畢,需要將其所作的功能合并到master分支 ,他可以有兩種選擇:

        直接git merge,那么這個時候會這么做

        • (1)找到master和dev的共同祖先,即C2
        • (2)將dev的最新提交C5和master的最新提交即C6合并成一個新的提交C7,有沖突的話,解決沖突
        • (3)將C2之后的dev和master所有提交點(diǎn),按照提交時間合并到master
        e05265d8bdf614c0b0480a47074e7221.webp

        直接git rebase

        切換分支到需要rebase的分支,這里是dev分支

        執(zhí)行g(shù)it rebase master,有沖突就解決沖突,解決后直接git add . 再git rebase --continue即可

        發(fā)現(xiàn)采用rebase的方式進(jìn)行分支合并,整個master分支并沒有多出一個新的commit,原來dev分支上的那幾次(C3,C4,C5)commit記錄在rebase之后其hash值發(fā)生了變化,不在是當(dāng)初在dev分支上提交的時候的hash值了,但是提交的內(nèi)容被全部復(fù)制保留了,并且整個master分支的commit記錄呈線性記錄

        此時git的分支類圖

        af97b9170bffe72d4eed4433ddc88920.webp

        總結(jié)

        git merge 會讓2個分支的提交按照提交時間進(jìn)行排序,并且會把最新的2個commit合并成一個commit。最后的分支樹呈現(xiàn)非線性的結(jié)構(gòu)

        git reabse 將dev的當(dāng)前提交復(fù)制到master的最新提交之后,會形成一個線性的分支樹

        作者:小孔不菜 鏈接:https://juejin.cn/post/7123826435357147166


        瀏覽 46
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 男模隐私部位无内裤 | 用力挺进她的花苞啊太视频 | 天天做天天爱 | 亚洲秘 无码一区二区三区妃光 | 强伦人妻一区二区三区视频 |