首頁 > 農業

【第二講】git如何選擇性合併背景,如何在開發過程中進行多次commit?

由 小安聊程式設計 發表于 農業2021-05-16

簡介exec:執行shell命令(縮寫:x)drop:我要丟棄該commit(縮寫:d)根據我們的需求,我們將commit內容編輯如下:pick d2cf1f9 fix: 第一次提交s 47971f6 fix: 第二次提交s fb28c8d f

git如何選擇性合併

背景

一個專案通常是由一個團隊中的多個人共同維護,在開發一個功能迭代時會切分支出來進行開發,開發者在開發過程中多多少少會對程式碼各種修改,本地分支會進行多次commit並且推到遠端當前分支,最後合併到master後,會看到亂七八糟的所有增量修改歷史。其實對別人來說,我們的改動應該就是增加或者刪除,給別人看開發過程的增量反而太亂。於是我們可以將feature分支的提交合併成一個版本後然後再merge到主幹,形成

線性的commit記錄,

主幹看起來就清爽多了。

目的

合併主幹分支比較清爽乾淨

一個

feature開發僅一個commit版本標記

在Review程式碼時方便本次迭代的相關改動

Rebase簡介

rebase的作用簡要概括為:可以對某一段線性提交歷史進行編輯、刪除、複製、貼上;因此,合理使用rebase命令可以使我們的提交歷史乾淨、簡潔!

但是需要注意的是:

不要透過rebase對任何已經提交到公共倉庫中的commit進行修改(在你開發分支即可)

反面例子

新建一個repo rebase-test;新建開發分支dev;在開發分支是commit了三次然後merge到master分支;然後git log或者git log ——oneline;可以發現dev分支上的每次commit都體現到了master上

fb28c8d (HEAD -> master, origin/master, origin/dev, origin/HEAD, dev) fix: 第三次提交47971f6 fix: 第二次提交d2cf1f9 fix: 第一次提交26bac61 Initial commit

如果用git log可以按s向下翻log

git log ——oneline 可以一行展現

4。 具體操作

當我們在本地倉庫中提交了多次,在我們把本地提交push到公共倉庫中之前,為了讓提交記錄更簡潔明瞭,我們希望把如下分支B、C、D三個提交記錄合併為一個完整的提交,然後再push到公共倉庫。

使用git rebase合併多次commit

這裡我們使用命令:

git rebase -i [startpoint] [endpoint]

其中-i的意思是——interactive,即彈出互動式的介面讓使用者編輯完成合並操作,[startpoint] [endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點預設是當前分支HEAD所指向的commit(注:該區間指定的是一個前開後閉的區間)。 在檢視到了log日誌後,我們執行以下命令:

git rebase -i 36224db

或者

git rebase -i HEAD~3

然後我們會看到如下介面:

使用git rebase合併多次commit

上面未被註釋的部分列出的是我們本次rebase操作包含的所有提交,下面註釋部分是git為我們提供的命令說明。每一個commit id 前面的pick表示指令型別,git 為我們提供了以下幾個命令:

pick:保留該commit(縮寫:p)

reword:保留該commit,但我需要修改該commit的註釋(縮寫:r)

edit:保留該commit, 但我要停下來修改該提交(不僅僅修改註釋)(縮寫:e)

squash:將該commit和前一個commit合併(縮寫:s),兩個註釋分成兩行。

fixup:將該commit和前一個commit合併,但我不要保留該提交的註釋資訊(縮寫:f),只保留前一個commit資訊。

exec:執行shell命令(縮寫:x)

drop:我要丟棄該commit(縮寫:d)

根據我們的需求,我們將commit內容編輯如下:

pick d2cf1f9 fix: 第一次提交

s 47971f6 fix: 第二次提交

s fb28c8d fix: 第三次提交

上面的意思就是把第二次、第三次提交都合併到第一次提交上

然後wq儲存退出後是註釋修改介面:

使用git rebase合併多次commit

可以瀏覽態 按下兩個dd可以刪除一行

最終的編輯效果如下:

使用git rebase合併多次commit

編輯完儲存即可完成commit的合併了:

使用git rebase合併多次commit

總結:git rebase 後再git merge

rebase之前需要經master分支拉到最新

切換分支到需要rebase的分支,這裡是dev分支

執行git rebase master,有衝突就解決衝突,解決後直接git add 。 再git rebase ——continue即可

Tags:commitgit提交rebase分支