git rebase 是不是就是跟 merge master 到你的 branch 產生程式碼的效果一樣的, 不考慮 history log 等其他的因素
你都說不考慮 History Log 了,那就沒啥可說的了…
不過實際上 Rebase 是沒有方向約束的,你可以把 Master Rebase 到你的分支,也可以反過來,任何分支 Rebase 到任何目標都是可以的。
本質上 Merge 就是無視兩棵樹在歷史記錄上的差異,只是在執行 Merge 那一刻的將差異進行合併而已;而 Rebase 則是要梳理兩棵樹在歷史記錄上的差異,然後才是合併。
你可以形象的記憶:
舉個例子,我從 master 分離一個分支出去,在此基礎上做了一些提交,而此時 master 上也有別人的新提交了。如果我在新分支 merge master,則我的分支上會出現一個新的 commit,記錄下我的和 master 上的變更的合體。就像兩條線合成了一點。如果我用 rebase,則從我分離的那一點開始,master 上的新提交先填充進來,然後再把我自己做的提交重新寫在更新的上面。於是內容還是合併了,但歷史記錄則是順序的,從你的角度來看就好像從未和 master 分離過一樣。
你都說不考慮 History Log 了,那就沒啥可說的了…
不過實際上 Rebase 是沒有方向約束的,你可以把 Master Rebase 到你的分支,也可以反過來,任何分支 Rebase 到任何目標都是可以的。
本質上 Merge 就是無視兩棵樹在歷史記錄上的差異,只是在執行 Merge 那一刻的將差異進行合併而已;而 Rebase 則是要梳理兩棵樹在歷史記錄上的差異,然後才是合併。
你可以形象的記憶:
舉個例子,我從 master 分離一個分支出去,在此基礎上做了一些提交,而此時 master 上也有別人的新提交了。如果我在新分支 merge master,則我的分支上會出現一個新的 commit,記錄下我的和 master 上的變更的合體。就像兩條線合成了一點。如果我用 rebase,則從我分離的那一點開始,master 上的新提交先填充進來,然後再把我自己做的提交重新寫在更新的上面。於是內容還是合併了,但歷史記錄則是順序的,從你的角度來看就好像從未和 master 分離過一樣。