1. Git在rebase時(shí)如何保留merge commit(實(shí)用?。?/h1>

        共 1564字,需瀏覽 4分鐘

         ·

        2021-07-27 22:01

        rebase是git中一個(gè)神奇的命令,可以讓并行的提交,變得像線性開(kāi)發(fā)的一樣,最近發(fā)現(xiàn)rebase在遇到merge commit時(shí)可能和認(rèn)知不太一樣,本文通過(guò)一個(gè)例子來(lái)講解下git rebase遇到merge commit時(shí)該如何應(yīng)對(duì)

        經(jīng)典rebase

        先來(lái)看下rebase的典型使用場(chǎng)景,假設(shè)我們有如下一個(gè)提交記錄


        當(dāng)dev想同步上游(master)的修改時(shí),有兩種方案,一種是merge,一種是rebase

        merge會(huì)創(chuàng)建一個(gè)commit節(jié)點(diǎn),并且能夠保留分支關(guān)系

        $ git merge master


        但是一般上游到下游的操作,是不需要保留分支關(guān)系的,rebase正是為了這個(gè)場(chǎng)景設(shè)計(jì)的,rebase會(huì)將dev上的節(jié)點(diǎn),重新在master上重新創(chuàng)建一遍,看起來(lái)就是是在master分支最后開(kāi)發(fā)的一樣

        $ git rebase master


        至此就介紹完了rebase常規(guī)的使用場(chǎng)景

        merge rebase

        如果被rebase的分支上有merge commit,會(huì)發(fā)生什么呢?假設(shè)我們有如下的log tree(請(qǐng)?jiān)徫覒械卯?huà)圖了^_^)

        * 31ef4ec (HEAD -> master) e
        | * b554f2d (dev) Merge branch 'test' into dev
        | |\
        | | * 853aaf6 (test) c
        | * | 1af86fa d
        | |/
        | * c1b49a5 b
        |/
        * 763a350 a

        master分支在dev分支后面又有了新的提交,dev分支合并了test分支,現(xiàn)在dev分支想同步master分支,繼續(xù)使用rebase操作

        * 8924fda (HEAD -> dev) c
        * 06201b2 d
        * e0c6b78 b
        * 31ef4ec (master) e
        | * 853aaf6 (test) c
        | * c1b49a5 b
        |/
        * 763a350 a

        可以rebase將merge commit拋棄了,同時(shí)test分支上的提交c的內(nèi)容被patch到了dev分支上

        這可能和我的認(rèn)知不太一樣,我希望的效果是繼續(xù)保留merge commit,rebase 為我們提供--rebase-merges參數(shù)來(lái)這個(gè)問(wèn)題

        $ git rebase --rebase-merges master

        看下log tree,變基成功了,merge commit被保留了,但test分支也被變基了,test分支上的commit還是被復(fù)制了一份

        *   88e6cf7 (HEAD -> dev) Merge branch 'test' into dev
        |\
        | * e2fae10 c
        * | 65869a2 d
        |/
        * e61592d b
        * 31ef4ec (master) e
        | * 853aaf6 (test) c
        | * c1b49a5 b
        |/
        * 763a350 a

        總結(jié)

        最后建議大家merge和rebase盡量使用一種即可,即rebase的代碼,不要包含merge commit;使用了merge操作,就不要在rebase了


        最后



        如果你覺(jué)得這篇內(nèi)容對(duì)你挺有啟發(fā),我想邀請(qǐng)你幫我三個(gè)小忙:

        1. 點(diǎn)個(gè)「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點(diǎn)在看,都是耍流氓 -_-)

        2. 歡迎加我微信「 sherlocked_93 」拉你進(jìn)技術(shù)群,長(zhǎng)期交流學(xué)習(xí)...

        3. 關(guān)注公眾號(hào)「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時(shí)聊騷。


        點(diǎn)個(gè)在看支持我吧,轉(zhuǎn)發(fā)就更好了



        瀏覽 74
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)

        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 日批视频免费看 | 2021国产精品视频 | 在线无码国产一区二区三区性色 | 国产精久久久久久久 | 一本道无码在线 |