天天看點

git rebase做了什麼

1.我們先從 ​

​master​

​​ 分支切出一個 ​

​dev​

​ 分支,進行開發:

git:(master) git checkout -b feature1      

2.這時候,你的同僚完成了一次 ​

​hotfix​

​​,并合并入了 ​

​master​

​​ 分支,此時 ​

​master​

​​ 已經領先于你的 ​

​feature1​

​​ 分支了:

3.恰巧,我們想要同步 ​​

​master​

​​ 分支的改動,首先想到了 ​

​merge​

​,執行:

git:(feature1) git merge master      

圖中綠色的點就是我們合并之後的結果,執行:

git:(feature1) git log      

就會在記錄裡發現一些 ​

​merge​

​​ 的資訊,但是我們覺得這樣污染了 ​

​commit​

​​ 記錄,想要保持一份幹淨的 ​

​commit​

​​,怎麼辦呢?這時候,​

​git rebase​

​ 就派上用場了。

4.讓我們來試試 ​

​git rebase​

​​ ,先回退到同僚 ​

​hotfix​

​​ 後合并 ​

​master​

​ 的步驟:

5.使用 ​

​rebase​

​ 後來看看結果:

git:(feature1) git rebase master      

這裡補充一點:​

​rebase​

​ 做了什麼操作呢?

首先,​

​git​

​​ 會把 ​

​feature1​

​​ 分支裡面的每個 ​

​commit​

​​ 取消掉;

其次,把上面的操作臨時儲存成 ​​

​patch​

​​ 檔案,存在 ​

​.git/rebase​

​​ 目錄下;

然後,把 ​​

​feature1​

​​ 分支更新到最新的 ​

​master​

​​ 分支;

最後,把上面儲存的 ​​

​patch​

​​ 檔案應用到 ​

​feature1​

​ 分支上;

從 ​

​commit​

​​ 記錄我們可以看出來,​

​feature1​

​​ 分支是基于 ​

​hotfix​

​​ 合并後的 ​

​master​

​​ ,自然而然的成為了最領先的分支,而且沒有 ​

​merge​

​​ 的 ​

​commit​

​ 記錄,是不是感覺很舒服了。

6.在 ​

​rebase​

​​ 的過程中,也許會出現沖突 ​

​conflict​

​​。在這種情況,​

​git​

​​ 會停止 ​

​rebase​

​​ 并會讓你去解決沖突。在解決完沖突後,用 ​

​git add​

​ 指令去更新這些内容。

注意,你無需執行 git-commit,隻要執行 continue

git rebase --continue      
git rebase —abort