搜尋

首頁  >  問答  >  主體

git rebase 與 merge

git rebase 是不是就是跟 merge master 到你的 branch 產生程式碼的效果一樣的, 不考慮 history log 等其他的因素

为情所困为情所困2796 天前576

全部回覆(1)我來回復

  • 为情所困

    为情所困2017-04-27 09:05:25

    你都說不考慮 History Log 了,那就沒啥可說的了…

    不過實際上 Rebase 是沒有方向約束的,你可以把 Master Rebase 到你的分支,也可以反過來,任何分支 Rebase 到任何目標都是可以的。

    本質上 Merge 就是無視兩棵樹在歷史記錄上的差異,只是在執行 Merge 那一刻的將差異進行合併而已;而 Rebase 則是要梳理兩棵樹在歷史記錄上的差異,然後才是合併。

    你可以形象的記憶:

    1. Merge 就是“合而為一”(注意我說的是“而”,不是“二”,因為 Merge 並非只能合併兩方)
    2. Rebase 則是「把你放在我下面,我要站在你上面,最後合體」。

    舉個例子,我從 master 分離一個分支出去,在此基礎上做了一些提交,而此時 master 上也有別人的新提交了。如果我在新分支 merge master,則我的分支上會出現一個新的 commit,記錄下我的和 master 上的變更的合體。就像兩條線合成了一點。如果我用 rebase,則從我分離的那一點開始,master 上的新提交先填充進來,然後再把我自己做的提交重新寫在更新的上面。於是內容還是合併了,但歷史記錄則是順序的,從你的角度來看就好像從未和 master 分離過一樣。

    回覆
    0
  • 取消回覆