git rebase 和 git fetch 區別

dev分支狀態如下:dev分支狀態
test分支狀態如下:test分支狀態
使git merge test之後:使git merge test之後
可見dev分支有了一次新的提交併且test分支之後的提交都當作當前分支的提交依次在log中顯示。對test分支的log木有影響。
使用git reset –hard HEAD^和git rebase test之後dev狀態:
之後dev狀態
可見沒有新增新的commit且test分支合併到了dev分支
test分支狀態:之後test分支狀態
並無變化。
注意:rebase的時候,若dev分支,有5個commit,test分支有1個commit,則git rebase test的時候,會將dev分支的5個commit分別應用到test分支上去。此時,如果有衝突,則很有可能會要解決5次。
而如果切換到test分支使用git rebase dev則會將test分支的一個commit應用到dev上去,此時只會需要解決一次衝突。
這就是爲什麼建議一般我們把別的分支合併到master時用merge,而把master合併到別的分支時會用到rebase的原因,這是因爲master分支一般commit會比較頻繁
所以每次下拉代碼fetch之後用rebase的原因就是:
本地commit之後,fetch遠端代碼,此時,遠端代碼可能會被若干人修改會有若干個commit,而本地就一個commit,然後git rebase的時候,是默認rebase 遠端代碼,此時會將本地commit應用到遠端代碼,也就只需要解決一次衝突,並且rebase之後沒有新的commit,很友好。但是,如果使用merge,則會產生新的commit。

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