<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          合并代碼還在用git merge嗎?我們都用git rebase!

          共 1234字,需瀏覽 3分鐘

           ·

          2022-01-14 17:00


          作者:Will_Liao

          來源:juejin.cn/post/7001409038307033119


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


          目的都是將一個分支的commit合并到到另外一個分支中去


          # git merge


          1.在gitlab上新建一個項(xiàng)目,push一個test文件上去



          2.在本地修改test文件做兩次commit,每次commit都在文件中加一句修改





          3.在遠(yuǎn)程倉庫中直接修改文件并commit,模擬其他開發(fā)者的commit




          4.如果此時我push本地的提交到遠(yuǎn)程,就會被拒絕,因?yàn)檫h(yuǎn)程和本地已經(jīng)各自有commit了,我們常規(guī)的做法是git pull一下,在本地解決沖突,然后繼續(xù)push,本質(zhì)上git pull = git fetch + git merge


          產(chǎn)生沖突:




          處理沖突:



          重新走add commit 然后push,可以看到必須將合并當(dāng)作一個新的commit:


          # git rebase


          如果我們此時采用git pull --rebase,也就是=git fetch + git rebase


          1.一樣本地commit2次,遠(yuǎn)程commit2次




          2.使用可以看到git pull --rebase,還是會提示我們?nèi)ヌ幚頉_突,但是從git log 上可以看出明顯已經(jīng)發(fā)生了rebase,也就是變基,本地分支基于了遠(yuǎn)程的最新commit,而不是上次的本地commit




          3.處理沖突,每處理完一次本地commit沖突,用git add標(biāo)記沖突已處理完,用git rebase --continue繼續(xù)處理下一個本地commit,也可以先用git rebase -i將本地的commit合并為一個commit,這樣git pull --rebase就能一次處理所有的沖突



          4.push到遠(yuǎn)程之后,在分支圖可以明顯看到,跟merge的區(qū)別在于,rebase不會產(chǎn)生分支,并且也不會產(chǎn)生新的提交


          # 總結(jié)


          • merge 是一個合并操作,會將兩個分支的修改合并在一起,默認(rèn)操作的情況下會提交合并中修改的內(nèi)容。

          • merge 的提交歷史記錄了實(shí)際發(fā)生過什么,關(guān)注點(diǎn)在真實(shí)的提交歷史上面。

          • rebase 并沒有進(jìn)行合并操作,只是提取了當(dāng)前分支的修改,將其復(fù)制在了目標(biāo)分支的最新提交后面。

          • rebase 操作會丟棄當(dāng)前分支已提交的 commit,故不要在已經(jīng) push 到遠(yuǎn)程,和其他人正在協(xié)作開發(fā)的分支上執(zhí)行 rebase 操作。

          • merge 與 rebase 都是很好的分支合并命令,沒有好壞之分,使用哪一個應(yīng)由團(tuán)隊(duì)的實(shí)際開發(fā)需求及場景決定。

          • 如果比較關(guān)注commit時間的話,還是用git merge,rebase會打亂時間線是不可避免的。

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月综合激情 | 男人天堂网2024 | 中文字幕无码一区二区三区一本久 | 蜜桃操逼网站 | 午夜精品久久久久 |