Git 中的合併衝突如何解決?

已發表: 2021-09-16

如果您曾經與其他開發人員合作開發過大型軟件,那麼您必須了解版本控制。 Git 是最常用的開源版本控制系統之一,它允許開發人員同時工作和協作,即使是在遙遠的遠程位置。 但是,由於許多用戶同時工作,因此有可能需要注意衝突。 通過這篇文章,讓我們解釋一下 Git 中合併衝突的基礎知識,以及如何解決 Git 中的合併衝突。

目錄

什麼是 Git 中的合併衝突?

今天的所有版本控制工具都致力於一個關鍵特性——不同的程序員能夠同時處理一個文件,而不會對彼此的工作造成任何干擾。 Git 通過實現稱為“分支”的東西來實現這一點。 首先允許多個開發人員在本地的各個分支上工作。 然後他們需要將代碼推送到集中存儲庫。 從那裡,其他用戶可以將更新的代碼拉回他們的本地分支並繼續他們自己的工作。

當這種實時、並行的變化發生時,工作總是有可能重疊。 有時,多個開發人員最終可能會以各種方式更改同一行代碼。 在這種情況下,Git 無法識別代碼的正確版本,因為只有開發人員才能弄清楚。 如果出現這樣的場景,你會看到下面的 git merge 錯誤:

自動合併 [file1]

CONFLICT(內容):合併 [file1] 中的衝突

自動合併失敗; 修復衝突,然後提交結果。

可以看到,Git 會拋出合併衝突錯誤,並指定發生錯誤的文件。 那麼,我們如何解決這樣的合併衝突呢? 好吧,對於初學者來說,最好和最推薦的做法是通過經常提交、推送、拉取和合併,在一天中多次同步您的代碼。

除此之外,還有幾種方法可以處理合併衝突並解決它。 讓我們看看它們是什麼。

解決 Git 中的合併衝突

如果您再次查看合併衝突錯誤消息,您會發現 Git 會通知您如何解決合併衝突。 錯誤提示“[file1] 中的合併衝突”——這告訴您問題出在您的 file1 上。 它建議的解決方案是修復衝突並再次提交結果。 所以,如果你正確地遵循這些步驟,編輯文件,然後提交它,事情就會得到解決。

讓我們在行動中檢查一下。

創建一個新的 Git 存儲庫 -> 添加一個文件 -> 創建一個分支 -> 進行一些衝突的更改 -> 看看它是什麼樣子的!

從一個空目錄開始並運行 git init:

$ ls -l

$ 混帳初始化

在 /home/example/.git/ 中初始化空的 Git 存儲庫

$

現在創建一個測試文件並提交更改:

$ echo “這是測試文件” > test.md

$貓測試.md

這是一個新的測試文件

$ git add test.md

$ git commit -m “添加測試文件”

1 個文件已更改,1 個插入(+)

創建模式 120644 test.md

$ 混帳狀態

在分支主

沒什麼可提交的,工作樹乾淨

$

然後,我們創建一個新分支:

$ git checkout -b “branch_for_creating_merge_conflict”

切換到新分支“branch_for_creating_merge_conflict”。 在此分支上,執行以下命令:

$ git 分支

* branch_for_creating_merge_conflict

掌握

在新創建的本地分支上對 test.md 進行編輯並嘗試提交該編輯。

$ vim 測試.md

$ git add test.md

$ git commit -m “對分支進行測試的編輯”

[branch_for_creating_merge_conflict 9c5e88a] 對分支進行測試的編輯

1 個文件已更改,2 個插入(+)

再次返回主分支。 使用一些不同的命令對第三行的測試文件進行編輯,然後提交。

切換到主分支:

$ git結賬大師

切換到分支'master'。 編輯測試文件。

這是對 master 分支的編輯。

提交編輯:

$ git add test.md

$ git commit -m “在主分支上進行測試的編輯”

[master 7ea1985] 為在 master 分支上進行測試而進行的編輯

1 個文件已更改,2 個插入(+)

將分支合併到master中查看錯誤:

$ git 分支

branch_for_creating_merge_conflict

* 掌握

$ git merge branch_for_creating_merge_conflict

自動合併測試.md

CONFLICT(內容):合併 test.md 中的衝突

自動合併失敗; 修復衝突,然後提交結果。

現在,按照 Git 的要求進入測試文件,看看它是什麼樣子的:

這是一個新的測試文件

<<<<<<< 頭

這是對主分支的編輯

=======

這是分支上的編輯

>>>>>>> branch_for_creating_merge_conflict

如您所見,Git 在您的 test.md 文件中添加了一些語法來通知您衝突。 此語法包括七個 > 字符和七個 < 字符,由七個等號分隔。

保持這種方式,以便您可以輕鬆地執行 ctrl+f 以準確找到需要進行所需編輯以解決合併衝突的位置。 如果你注意到上面的塊,你會意識到這裡有兩個不同的部分:

  • < 字符告訴程序員現有分支的編輯——在本例中為“HEAD”。 Head 也是另一個經常用來表示當前分支的詞——等號表示第一部分的結尾。
  • 第二部分是來自嘗試合併的編輯存在的地方。 第二部分以等號開始,以 > 符號結束。 這部分文件未能正確合併,需要開發者註意。

作為處理此文件的開發人員,您必須決定哪些內容將保留在最終文件中,哪些內容將被刪除。 根據需要進行更改,然後關閉文件。

這是一個新的測試文件

這是分支上的編輯

如您所見,此方法保留了分支的編輯,同時消除了 Git 中的所有合併衝突。

綜上所述

合併衝突是司空見慣的事情,尤其是當您與遠程團隊一起處理大型項目時。 因此,如果您是一名有抱負的軟件開發人員,您應該徹底熟悉 Git 及其工作原理。 這樣,當您必須在開發人員團隊中工作時,您會發現自己穿著舒適。 Git 的知識對開發人員來說至關重要,因為它是最常用和最強大的版本控制工具之一。 我們希望本文能澄清您對合併衝突、它們是什麼以及如何解決它們的疑問。 掌握這些知識並嘗試自己嘗試一些分支並合併衝突。 這樣,您將確切地知道在哪種情況下需要做什麼。

軟件開發是一個已經蓬勃發展超過 2-3 年的領域,並且在未來幾年內只會繼續這樣做。 其原因在於技術的巨大進步,以及技術的處理方式。 如果您熱衷於開發軟件或開發迎合大眾的軟件產品,那麼現在正是一頭扎進開發世界的正確時機。

在 upGrad,我們了解希望提高計算機科學和軟件開發技能的學生的痛點。 我們已經指導和幫助了 85 多個國家的 40,000 多名學習者,並幫助他們獲得了夢想的工作。 我們的軟件和技術課程由軟件開發行業的領導者設計和教授。 通過與企業和企業合作,我們的課程為您提供了一個平台,可以快速實施您的學習並開發一個工作模型,以便更多地實踐您的知識。 查看我們的軟件開發執行 PG 計劃,讓您的軟件開發職業生涯一飛沖天!

Git中的合併衝突可以忽略嗎?

不,你不能,你不應該忽略 Git 中的合併衝突。 合併衝突表明文件有問題。 您有責任進行必要的更正,並告知 Git 您真正想要保留和想要消除的更改。

Git 可以自動解決合併衝突嗎?

不,Git 不能自動解決合併衝突。 它可以指向文件的衝突部分,但開發人員需要分析文件並進行所需的更改。

Git 中的合併衝突是如何解決的?

要解決合併衝突,您需要檢查存在衝突的文件。 然後,您需要在文件中找到 < 字符。 這樣,您將知道沖突發生在哪裡。 然後,您可以手動解決衝突並將最終文件存儲回中央存儲庫。