git rebase分支的流程和注意事項

比如有兩個開發了比較多功能的分支,或者在比較久的一次提交上做了一個hotfix,這個時候如果合併,通過ui查看會有一條額外的很長的線連接過來,不美觀,看起來也不方便。

可以用rebase進行變基,強行把兩個分支的內容合併到一起。

rebase與merge的區別

merge就是把兩個分支,當前的內容,進行比較,如果沒有衝突,就把對應的內容做修改,產生一次新的提交。

rebase是把指定的分支作爲當前分支的底座,從相同的起點開始(因爲大家肯定是從某次提交切分出來的),把當前的提交按照新的基礎,再一次提交一遍。這樣就會產生一條新的提交線,並且只有這一條。

流程

注意 如果分支太多,或者太雜亂,並且對rebase不熟悉,建議不要rebase,可能會導致代碼丟失。

一在開發分支上rebase依賴的主分支

比如有一個dev分支,突然來了一個小任務,切了一個dev_hotfix分支,開發完成後,需要在dev_hotfix上rebase dev分支。

因爲rebase後,整個分支的HEAD的哈希值會變掉,就是雖然內容一致,也會更改,這也是與merge不同的地方,merge是增加一個新提交,都是向前進的,而rebase是修改每一次提交,並沒有前進。如果在公共分支上rebase,就會導致與遠程分支衝突,這時候不管怎麼解決都很噁心,如果pull加merge,就會出現相同的提交存在兩次,因爲git通過哈希值判斷,雖然是相同提交,因爲rebase做了重新提交,所以哈希值變了,就會認爲是不同提交,就存在了兩個;如果強制push,那麼所有人都會衝突,還會導致遠程代碼和其他人代碼丟失。所以切忌不要在公共分支rebase。

在依賴分之上merge rebase後的分支

上面也說明了,肯定不可能在公共分支上rebase,那麼只有merge了。有人會問,merge後不會出現額外多一條線的情況嗎,答案是不會的,因爲開發分支已經以依賴分支變基了,相當於在依賴分支上做的開發,當merge過來後,就相當於在依賴分支上依次提交了記錄,在自己分支上提交記錄,怎麼會額外多一個提交流程呢。

總的來說,rebase相當於在一個基礎上,依次提交當前分支的記錄;merge是把兩個分支合併

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章