1. 程式人生 > >git rebase & merge 將其他分支的修改合併到當前分支

git rebase & merge 將其他分支的修改合併到當前分支

例如現在有兩個分支 master 和 feature, 你在 feature 分支上進行了實驗,這時候有個另外的人在 master 分支上進行了新的提交。那麼你需要將 master上別人的修改應用到 feature 分支上。

方法1: merge

git checkout feature
git merge master

# 或者直接指定兩個分支:
git merge master feature

這樣操作後會在 feature 分支上產生一個新的 commit, 這個commit就是包含了 master 分支的修改。同時歷史記錄中也會包含這個 commit 的資訊。這樣會有個好處,也會帶來問題。
好處就是:merge 是 non-destructive 的操作,比較安全。(相對於rebase操作)


問題就是:如果merge頻繁,那麼 feature 分支的歷史記錄中會包含很多個由於 merge 產生的新 commit 資訊。這可能不是你希望看到了…)。

如圖:
這裡寫圖片描述

方法2: rebase

git checkout feature
git rebase master // 將 master 上的修改合併到 feature 分支(當前分支)。

rebase 會將 feature 上的歷史 commit 全部修改,並且用新的提交覆蓋之(即下圖中的 Brand New Commit)。
看起來就是你的 feature 分支從一個開始就是在最新的 master 上開發的( 新的master跑到了你分支的最開始處 )。

如圖(注意比較與上圖 merge 的差異):
這裡寫圖片描述

一個注意點就是不要將 master 分支 rebase 到其他分支上面。這樣會導致該 master 分支和其他人的 master 分支的歷史記錄不一樣。然後你還得將你的 master 分支與別人的master分支merge。

所以,在 rebase 一個分支前想一下別人有沒有 watch 這個分支, 因為rebase 會將該分支的歷史提交修改。