Git merge和rebase分支合併命令的區別

2021-09-11 09:25:05 字數 3380 閱讀 5124

歡迎關注富途web開發團隊,缺人從眾

上週花了時間把futu web部落格分類,文章,入口搞了一下,主要為了解決seo問題。接下來seo好不好就看效果了。

futu web 部落格位址

檔案狀態轉換:

檔案儲存:

上面這兩張圖會對大家理解git命令有很大的幫助。

在使用git進行版本管理的專案中,當完成乙個特性的開發並將其合併到master分支時,我們有兩種方式:git mergegit rebase。通常,我們對git merge使用的較多,而對於git rebase使用的較少,其實git rebase也是極其強大的一種方法。下面我們就來講一講git mergegit rebase的差別和在實際中的使用。

為了更好地觀察執行git mergegit rebase之後發生的現象,我們首先來做一些準備工作,即建立乙個專案倉庫,然後在其中構建兩條分支,再增加幾次提交。

具體如下:

建立乙個目錄gittest在目錄mytest中新建乙個檔案readme.md,隨便新增乙個標題,和第乙個列表項add master1並提交到本地倉庫

在當前分支的基礎上新建一條分支,名為feature,將列表項add master1修改為add feature1並提交到本地倉庫

隨後切換到分枝master上新增乙個新的列表項add master2並提交到本地倉庫

隨後切換到分枝feature上新增乙個新的列表項add feature2並提交到本地倉庫

重複上面的步驟 4 和 5,直至在masterfeature上各新增了 4 條列表項

此時你的倉庫分支提交的記錄看起來應該是這樣的:

初始master分支內容應該是這樣的:

初始feature分支內容應該是這樣的:

從目錄gittest拷貝出乙份來,命名為gitmerge來進行我們的合併操作。

git merge的使用方法很簡單,假如你想將分支feature合併到分支master,那麼只需執行如下兩步即可:

如上圖所示,git merge有如下特點:

為什麼講git merge提交的資訊過多可能會影響查詢問題的難度呢?因為在乙個大型專案中,單純依靠git merge方法進行合併,會儲存所有的提交過程的資訊:引出分支,合併分支,在分支上再引出新的分支等等,類似這樣的操作一多,提交歷史資訊就會顯得雜亂,這時如果有問題需要查詢就會比較困難了。

使用git merge之後的分支提交記錄如下:

git merge一致,git rebase的目的也是將乙個分支的更改併入到另外乙個分支中去。

如上圖所示,他的主要特點如下:

那麼我們現在來具體操作一下,看看git rebase是如何做的。

首先,和git merge不同的是,你需要在feature分支上進行git rebase master的操作,意味著讓當前分支feature相對於 分支master進行變基:

在解決衝突之後執行git rebase --continue時遇到了提示,看來我們首先需要把我們的修改存到暫存區,隨後再執行git rebase --continue。執行之後又遇到了衝突,這次是與feature分支的第二次提交進行對比出現的衝突,意味著我們需要多次解決同乙個地方的衝突。

繼續重複先解決衝突,再git rebase --continue的步驟,直到遇到:

意味著完成了feature最後一次提交的變基操作,至此整個變基就完成了。

再來看看執行git rebase之後的feature分支:

完全符合上面所說的執行git rebase的特點,我們引出feature分支的位置變了,沒有多餘的提交歷史,且提交的時序也改變了,另外回憶一下,在我們執行變基的過程中也多次解決了同乙個地方的衝突。

這個時候我們再切換到master分支上,將feature分支合併進來。

看得出來,feature分支上的所有提交資訊都會被合併到master分支上了,這些資訊對我們來說不是必要的,我們在masetr分支上往往只需要知道合併進來了什麼新的功能即可,這些多餘的資訊可以通過git rebase的互動模式進行整合,下一節會講到這個。

開啟變基的互動模式只需要傳入乙個引數-i即可,同時還需要指定對哪些提交進行處理,如:

git rebase -i head~4

複製**

上述命令指定了對當前分支的最近四次提交進行操作。下面我們使用上面這行命令將feature分支的提交合併。

中間紅框內有一些命令,可以用來處理某次提交的,此處我們使用squash來將所有的commit合併成一次提交,編輯並儲存之後會出現編輯提交的資訊的提示,編輯提交即可。

此時再看feature分支上的提交記錄,會看到只有一次提交了。

此時無論是直接將分支合併到master還是先變基再合併,master分支上的提交記錄都會十分清爽了。

當需要保留詳細的合併資訊的時候建議使用git merge,特別是需要將分支合併進入master分支時;當發現自己修改某個功能時,頻繁進行了git commit提交時,發現其實過多的提交資訊沒有必要時,可以嘗試git rebase

git merge和rebase的區別

git merge 會生成乙個新得合併節點,而rebase不會 比如 d e test a b c f master 使用merge合併 d e a b c f g test,master 而使用rebase則 a b d e c f test,master 使用git pull時預設是merge,...

git merge和rebase的區別

一直以來都以為rebase是合併衝突的一種手段,和merge一樣的,有哪個都行。今天才決定把他們搞懂了。我是有多麼的懶。git merge 會生成乙個新得合併節點,而rebase不會 d e test a b c f master 使用merge合併後 d e a b c f g test,mast...

git merge和rebase的區別

我從用git就一直用rebase,但是新的公司需要用merge命令,我不是很明白,所以查了一些資料,總結了下面的內容,如果有什麼不妥的地方,還望指正,我一定虛心學習。標題上的兩個命令 merge和rebase都是用來合併分支的。這裡不解釋rebase命令,以及兩個命令的原理,詳細解釋參考這裡。下面的...