2013年12月23日 星期一

Git (四) Rebase vs Merge (續)

在上一篇有講述rebase 和 merge上的差異,這篇要講的是線圖上的差異

先看看下面三張圖表


原圖



Merge


Rebase


rebase 可以將線圖拉直,merge則是會將兩個線圖合併
rebase的好處是可以將branch的紀錄消除(在線圖上就不會看到兩條線)
在使用上是看個人喜好,不過在使用rebase的時候要特別注意
網路上有人認為rebase is evil,他們認為

When you rebase a branch, you are changing its history in a way that will cause problems for anyone who already has a copy of the branch in their repository and tries to pull updates from you.

意思是如果在某個很多人使用的branchA下,rebase另一個branchB,然後又將rebase之後的結果push出去,會使得該branchA的共同使用者遇到問題。

大部分的人都建議 rebase只用在private branch,


使用情境大概是

我在master上開一個branch 然後在上面實作了自己的功能,經過一段時間之後,我發現master經歷了許多版本的update,所以我希望將branch update到最新版本,以便於測試是否有問題,
這時候就可以使用 rebase 將我自己的branch update到最新版本。

不過..我的做法是會再新開一個branchC 然後將branchC 做rebase,就如同上面英文所說的,
rebase會更改歷史記錄,假設rebase失敗了,那local的檔案也會跟著毀掉,所以保險起見,我還是會先做個備份。


不建議的做法是

在一個眾多人參考的branch上開發了自己的功能,經過一段時間之後,發現跟server上的branch版本有差異,所以使用rebase 將版本 update到最新版本。

這兩個的差異就是在於一個是私人的branch 不管怎麼改都不會影響到別人
但是共用的branch如果操作錯了不僅整個分支會出問題,還會連帶影響到其他的開發人員,
這是很可怕的事情。


沒有留言:

張貼留言