1. 合并代碼用 merge 還是用 rebase ? 兩者的區(qū)別是什么?

        共 2733字,需瀏覽 6分鐘

         ·

        2024-07-16 09:03

        關(guān)注我們,設(shè)為星標(biāo),每天7:40不見(jiàn)不散,架構(gòu)路上與您共享

        回復(fù)架構(gòu)師獲取資源


        大家好,我是你們的朋友架構(gòu)君,一個(gè)會(huì)寫代碼吟詩(shī)的架構(gòu)師。


        1)git rebase 讓你的提交記錄更加清晰可讀

        git rebase 的使用

        rebase 翻譯為變基,他的作用和 merge 很相似,用于把一個(gè)分支的修改合并到當(dāng)前分支上。

        如下圖所示,下圖介紹了經(jīng)過(guò) rebase 前后提交歷史的變化情況。

        現(xiàn)在我們來(lái)用一個(gè)例子來(lái)解釋一下上面的過(guò)程。

        假設(shè)我們現(xiàn)在有2條分支,一個(gè)為 master ,一個(gè)為 feature/1,他們都基于初始的一個(gè)提交add readme進(jìn)行檢出分支,之后,master分支增加了3.js4.js的文件,分別進(jìn)行了2次提交,feature/1也增加了1.js2.js的文件,分別對(duì)應(yīng)以下2條提交記錄。

        master 分支如下圖:

        feature/1分支如下圖:

        結(jié)合起來(lái)看是這樣的

        此時(shí),切換到 feature/1 分支下,執(zhí)行 git rebase master ,成功之后,通過(guò) log 查看記錄。

        如下圖所示:可以看到先是逐個(gè)應(yīng)用了 mater 分支的更改,然后以 master 分支最后的提交作為基點(diǎn),再逐個(gè)應(yīng)用 feature/1的每個(gè)更改。

        所以,我們的提交記錄就會(huì)非常清晰,沒(méi)有分叉,上面演示的是比較順利的情況,但是大部分情況下,rebase 的過(guò)程中會(huì)產(chǎn)生沖突的,此時(shí),就需要手動(dòng)解決沖突,然后使用git addgit rebase --continue的方式來(lái)處理沖突,完成 rebase,如果不想要某次 rebase 的結(jié)果,那么需要使用 git rebase --skip來(lái)跳過(guò)這次 rebase。

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

        不同于 git rebase的是,git merge 在不是 fast-forward(快速合并)的情況下,會(huì)產(chǎn)生一條額外的合并記錄,類似Merge branch 'xxx' into 'xxx'的一條提交信息。

        另外,在解決沖突的時(shí)候,用 merge 只需要解決一次沖突即可,簡(jiǎn)單粗暴,而用 rebase 的時(shí)候 ,需要一次又一次的解決沖突。

        3)git rebase 交互模式

        在開(kāi)發(fā)中,常會(huì)遇到在一個(gè)分支上產(chǎn)生了很多的無(wú)效的提交,這種情況下使用 rebase 的交互式模式可以把已經(jīng)發(fā)生的多次提交壓縮成一次提交,得到了一個(gè)干凈的提交歷史,例如某個(gè)分支的提交歷史情況如下:

        進(jìn)入交互式模式的方式是執(zhí)行:

        git rebase -i <base-commit>

        參數(shù)base-commit就是指明操作的基點(diǎn)提交對(duì)象,基于這個(gè)基點(diǎn)進(jìn)行 rebase 的操作,對(duì)于上述提交歷史的例子,我們要把最后的一個(gè)提交對(duì)象(ac18084)之前的提交壓縮成一次提交,我們需要執(zhí)行的命令格式是:

        git rebase -i ac18084

        此時(shí)會(huì)進(jìn)入一個(gè) vim 的交互式頁(yè)面,編輯器列出的信息像下列這樣。

        想要合并這一堆更改,我們要使用 squash 策略進(jìn)行合并,即把當(dāng)前的 commit 和它的上一個(gè) commit 內(nèi)容進(jìn)行合并, 大概可以表示為下面這樣。

        pick  ... ...
        s     ... ... 
        s     ... ... 
        s     ... ... 

        修改文件后 按下:然后wq保存退出,此時(shí)又會(huì)彈出一個(gè)編輯頁(yè)面,這個(gè)頁(yè)面是用來(lái)編輯提交的信息,修改為feat: 更正,最后保存一下,接著使用git branch查看提交的 commit 信息,rebase 后的提交記錄如下圖所示,是不是清爽了很多?rebase 操作可以讓我們的提交歷史變得更加清晰。

        特別注意,只能在自己使用的 feature 分支上進(jìn)行 rebase 操作,不允許在集成分支上進(jìn)行 rebase,因?yàn)檫@種操作會(huì)修改集成分支的歷史記錄。

        來(lái)源:https://blog.csdn.net/qq_24147051


        到此文章就結(jié)束了。Java架構(gòu)師必看一個(gè)集公眾號(hào)、小程序、網(wǎng)站(3合1的文章平臺(tái),給您架構(gòu)路上一臂之力)。如果今天的文章對(duì)你在進(jìn)階架構(gòu)師的路上有新的啟發(fā)和進(jìn)步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進(jìn)階架構(gòu)師,在后臺(tái)回復(fù)“加群”即可入群。



        這些年小編給你分享過(guò)的干貨


        0.ChatGPT 4o 國(guó)內(nèi)直接用 !?。?/strong>

        1.idea2024.1.4永久激活碼(親測(cè)可用)

        2.優(yōu)質(zhì)ERP系統(tǒng)帶進(jìn)銷存財(cái)務(wù)生產(chǎn)功能(附源碼)

        3.優(yōu)質(zhì)SpringBoot帶工作流管理項(xiàng)目(附源碼)

        4.最好用的OA系統(tǒng),拿來(lái)即用(附源碼)

        5.SBoot+Vue外賣系統(tǒng)前后端都有(附源碼

        6.SBoot+Vue可視化大屏拖拽項(xiàng)目(附源碼)


        轉(zhuǎn)發(fā)在看就是最大的支持??

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 午夜69成人做爱视频网站 | ssni—392侵犯新任女教师 | 欧洲操逼视频 | 免费高清理伦片在线播放网站 | 色噜噜亚洲欧美在线视频 |