更新時(shí)間:2021-12-23 10:42:05 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2753次
在 Git 中,合并是連接分叉歷史的過(guò)程。它將兩個(gè)或多個(gè)發(fā)展歷史連接在一起。git merge 命令可以幫助您獲取 git branch 創(chuàng)建的數(shù)據(jù)并將它們集成到單個(gè)分支中。Git merge 會(huì)將一系列提交關(guān)聯(lián)到一個(gè)統(tǒng)一的歷史記錄中。一般使用 git merge 來(lái)合并兩個(gè)分支。

git merge 命令用于合并分支。
git merge 命令的語(yǔ)法如下:
$ git merge <查詢(xún)>
它可以在各種上下文中使用。一些如下:
場(chǎng)景 1:將指定的提交合并到當(dāng)前活動(dòng)的分支:
使用以下命令將指定的提交合并到當(dāng)前活動(dòng)的分支。
$ git merge <提交>
上面的命令會(huì)將指定的提交合并到當(dāng)前活動(dòng)的分支。您還可以通過(guò)在 中傳入分支名稱(chēng)來(lái)將指定的提交合并到指定的分支。讓我們看看如何提交到當(dāng)前活動(dòng)的分支。
請(qǐng)參閱以下示例。我對(duì)我的項(xiàng)目文件newfile1.txt進(jìn)行了一些更改,并將其提交到我的測(cè)試分支中。

復(fù)制要在活動(dòng)分支上合并的特定提交并執(zhí)行合并操作。請(qǐng)參閱以下輸出:

在上面的輸出中,我們已經(jīng)合并了活動(dòng)分支 test2 中的先前提交。
場(chǎng)景 2:將提交合并到主分支:
要將指定的提交合并到 master,首先要發(fā)現(xiàn)它的提交 id。使用 log 命令查找特定的提交 ID。
$git log
請(qǐng)參閱以下輸出:

要將提交合并到 master 分支,請(qǐng)切換到 master 分支。
$ git checkout master
現(xiàn)在,切換到分支“master”以對(duì)提交執(zhí)行合并操作。使用 git merge 命令和 master 分支名稱(chēng)。其語(yǔ)法如下:
$ git merge master
請(qǐng)參閱以下輸出:

如上面的輸出所示,提交 ID 為2852e020909dfe705707695fd6d715cd723f9540的提交已合并到主分支中。master 分支中的兩個(gè)文件已更改。但是,我們已經(jīng)在測(cè)試分支中進(jìn)行了此提交。因此,可以合并任何分支中的任何提交。
打開(kāi)新文件,您會(huì)注意到我們提交給測(cè)試分支的新行現(xiàn)在被復(fù)制到主分支上。
場(chǎng)景 3:Git 合并分支。
Git 允許將整個(gè)分支合并到另一個(gè)分支中。假設(shè)您在一個(gè)分支上進(jìn)行了許多更改,并希望一次合并所有這些更改。Git 允許您這樣做。請(qǐng)參閱以下示例:

在給定的輸出中,我對(duì) test 分支上的 newfile1 進(jìn)行了更改?,F(xiàn)在,我已經(jīng)在測(cè)試分支中提交了這個(gè)更改。

現(xiàn)在,切換到要合并的所需分支。在給定的示例中,我已切換到 master 分支。執(zhí)行以下命令將整個(gè)分支合并到活動(dòng)分支中。
$ git merge <branchname>

從給定的輸出中可以看出,分支 test2 的整個(gè)提交已合并到分支 master。
當(dāng)兩個(gè)分支嘗試合并,并且同時(shí)在同一個(gè)文件中進(jìn)行編輯時(shí),Git 將無(wú)法確定要采用哪個(gè)版本進(jìn)行更改。這種情況稱(chēng)為合并沖突。如果發(fā)生這種情況,它會(huì)在合并提交之前停止,以便您可以手動(dòng)解決沖突。

讓我們通過(guò)一個(gè)例子來(lái)理解它。
假設(shè)我的遠(yuǎn)程存儲(chǔ)庫(kù)已被我的兩個(gè)團(tuán)隊(duì)成員user1和user2克隆。user1 在我的項(xiàng)目索引文件中進(jìn)行了如下更改。

借助 git add 命令在本地存儲(chǔ)庫(kù)中更新它。

現(xiàn)在提交更改并使用遠(yuǎn)程存儲(chǔ)庫(kù)更新它。請(qǐng)參閱以下輸出:

現(xiàn)在,我的遠(yuǎn)程存儲(chǔ)庫(kù)將如下所示:

它將顯示文件的狀態(tài),例如由誰(shuí)和何時(shí)編輯。
現(xiàn)在,與此同時(shí),user2也更新索引文件如下。

User2 已添加并提交本地存儲(chǔ)庫(kù)中的更改。但是當(dāng)他試圖將它推送到遠(yuǎn)程服務(wù)器時(shí),它會(huì)拋出錯(cuò)誤。請(qǐng)參閱以下輸出:

在上面的輸出中,服務(wù)器知道該文件已經(jīng)更新并且沒(méi)有與其他分支合并。因此,推送請(qǐng)求被遠(yuǎn)程服務(wù)器拒絕。它會(huì)拋出一個(gè)錯(cuò)誤消息,比如[rejected] failed to push some refs to 。它會(huì)建議您在推送之前先拉取存儲(chǔ)庫(kù)。請(qǐng)參閱以下命令:

在給定的輸出中, git rebase 命令用于從遠(yuǎn)程 URL 中拉取存儲(chǔ)庫(kù)。在這里,它會(huì)在 中顯示類(lèi)似合并沖突的錯(cuò)誤消息。
要解決沖突,需要知道沖突是否發(fā)生以及發(fā)生的原因。Git合并工具命令用于解決沖突。合并命令的使用如下:
$ git mergetool
在我的存儲(chǔ)庫(kù)中,它將導(dǎo)致:

上面的輸出顯示了沖突文件的狀態(tài)。要解決沖突,只需按I 鍵進(jìn)入插入模式并根據(jù)需要進(jìn)行更改。按Esc 鍵, 退出插入模式。輸入:w! 在編輯器底部保存并退出更改。要接受更改,請(qǐng)使用 rebase 命令。它將按如下方式使用:
$ git rebase --continue
因此,沖突已經(jīng)解決。請(qǐng)參閱以下輸出:

在上面的輸出中,沖突已經(jīng)解決,本地存儲(chǔ)庫(kù)與遠(yuǎn)程存儲(chǔ)庫(kù)同步。如果大家想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線(xiàn)學(xué)習(xí),里面的課程內(nèi)容全面,從入門(mén)到精通,適合零基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)