1、rebase與merge的區別
git rebase: 變基/衍合,意即改變分支的根基。rebase的功能類似於merge,從某種程度上來說,rebase與merge可以完成類似的工作,不過二者的工作方式有着顯著的差異。
merge的工作方式
rebase的工作方式: git checkout mywork, git rebase origin 切換到mywork分支,基於mywork分支將origin合並進來(以變基rebase的方式合並進來)。
注意:rebase會修改分支提交的歷史。
2、rebase注意事項
rebase過程中也會出現沖突,解決沖突后,使用git add添加,然后執行git rebase --continue,接下來git會繼續應用余下的補丁。
任何時候都可以通過如下命令終止rebase,分支會恢復到rebase開始前的狀態 git rebase --abort
rebase最佳實踐:
不要對master分支執行rebase,否則會引起很多問題。
一般來說,執行rebase的分支都是自己的本地分支,沒有推送到遠程版本庫。
3、merge和rebase使用比較
3.1、merge使用
初始化一個git倉庫
初始化倉庫后,默認有一個master分支,在master分支創建一個文件
基於master分支創建兩個分支:develop分支和mywork分支
切換到develop分支,創建兩次提交
切換到mywork分支,創建兩次提交
先使用merge合並看下效果
解決沖突
將不要的刪除,保存退出。然后git add a.txt, git commit
使用merge合並的效果:
使用gitk查看
3.2、rebase使用
為了測試rebase,進行一次版本回退
執行 git rebase
vi a.txt 刪除不要的代碼,保存退出
解決完這次沖突后git rebase --continue繼續后面的補丁,后面由於不會再有沖突,所以自動合並完成。查看a.txt文件內容:
gitk查看,提交是一條線,沒有分叉
查看日志,mywork分支的兩次提交以補丁的形式合並到devlop的最后一次提交上,並且這兩次補丁提交id改變了。