作者:Will_Liao 來源:juejin.cn/post/7001409038307033119
git merge 和 git rebase的區別
目的都是將一個分支的commit合并到到另外一個分支中去
git merge
1.在gitlab上新建一個專案,push一個test檔案上去

2.在本地修改test檔案做兩次commit,每次commit都在檔案中加一句修改



3.在遠程倉庫中直接修改檔案并commit,模擬其他開發者的commit


4.如果此時我push本地的提交到遠程,就會被拒絕,因為遠程和本地已經各自有commit了,我們常規的做法是git pull一下,在本地解決沖突,然后繼續push,本質上git pull = git fetch + git merge
產生沖突:


處理沖突:

重新走add commit 然后push,可以看到必須將合并當作一個新的commit:

git rebase
如果我們此時采用git pull --rebase,也就是=git fetch + git rebase
1.一樣本地commit2次,遠程commit2次


2.使用可以看到git pull --rebase,還是會提示我們去處理沖突,但是從git log 上可以看出明顯已經發生了rebase,也就是變基,本地分支基于了遠程的最新commit,而不是上次的本地commit


3.處理沖突,每處理完一次本地commit沖突,用git add標記沖突已處理完,用git rebase --continue繼續處理下一個本地commit,也可以先用git rebase -i將本地的commit合并為一個commit,這樣git pull --rebase就能一次處理所有的沖突

4.push到遠程之后,在分支圖可以明顯看到,跟merge的區別在于,rebase不會產生分支,并且也不會產生新的提交

總結
- merge 是一個合并操作,會將兩個分支的修改合并在一起,默認操作的情況下會提交合并中修改的內容,
- merge 的提交歷史記錄了實際發生過什么,關注點在真實的提交歷史上面,
- rebase 并沒有進行合并操作,只是提取了當前分支的修改,將其復制在了目標分支的最新提交后面,
- rebase 操作會丟棄當前分支已提交的 commit,故不要在已經 push 到遠程,和其他人正在協作開發的分支上執行 rebase 操作,
- merge 與 rebase 都是很好的分支合并命令,沒有好壞之分,使用哪一個應由團隊的實際開發需求及場景決定,
- 如果比較關注commit時間的話,還是用git merge,rebase會打亂時間線是不可避免的,
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
2.勁爆!Java 協程要來了,,,
3.Spring Boot 2.x 教程,太全了!
4.20w 程式員紅包封面,快快領取,,,
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423457.html
標籤:其他
