解決Git 中的合併衝突| D棧 - Delft Stack

文章推薦指數: 80 %
投票人數:10人

Copy $ git merge main Auto-merging README.md CONFLICT (add/add): Merge conflict in README.md Automatic merge failed; fix conflicts and then ... Git貼士 .git目錄解釋 GitFetch和GitPull的區別 Git中的Gitkeep和Gitignore Git中的gitignore檔案 Git中的子模組更新 Git中的日誌圖 Git中的重置和恢復 Git倉庫視覺化 reportthisad 貼士文章 Git貼士 解決Git中的合併衝突 在本教程中,我們將演示如何解決在Git中合併兩個分支時出現的衝突。

通常,協作團隊環境中的不同團隊成員通常對相同的檔案進行工作。

例如,一位從事某些功能開發的團隊成員可能會編輯README檔案以提供有關所開發功能的資訊。

另一位致力於修復錯誤的團隊成員可能會在同一個README檔案中新增有關已修復錯誤的資訊。

他們可能在不同的分支上工作並在各自的分支中提交他們的更改。

有時,需要合併不同的分支以提供有凝聚力的構建。

因此,在不同分支更新相同檔案時,此操作會導致合併衝突。

然後需要解決衝突併合並更改。

我們現在將通過一個例子來說明這一點。

使用gitmergetool解決合併兩個分支時出現的衝突 在解決合併衝突之前,我們應該設定Git使用的diff工具,如下所示。

$gitconfigmerge.toolmeld $gitconfigmerge.conflictstylediff3 $gitconfigmergetool.promptfalse 上面的命令將meld設定為預設的diff工具。

此外,我們已將conflictstyle設定為diff3;這將diff工具設定為顯示兩個檔案的共同祖先(當前分支一和分支中要合併的分支)。

要檢視支援的不同差異工具,請執行以下命令。

$gitmergetool--tool-help 現在,我們從示例開始演示如何解決衝突。

假設我們有兩個分支,如下所示。

$gitbranch *main feature1 第一個分支是main分支,第二個是名為feature1的功能開發分支。

我們在main分支中有一個README.md檔案,其內容如下。

$catREADME.md #Upwork Upworkprojects 如上所示,我們目前在main分支。

然後,我們切換到feature1分支。

$gitcheckoutfeature1 Switchedtobranch'feature1' $gitbranch main *feature1 我們更新README.md並列印其內容如下。

$catREADME.md Thisisconflictingbranchline. 現在,我們將main分支與feature1分支合併以獲取該分支中的最新更改。

合併時,Git顯示合併衝突如下。

$gitmergemain Auto-mergingREADME.md CONFLICT(add/add):MergeconflictinREADME.md Automaticmergefailed;fixconflictsandthencommittheresult. 我們可以通過以下方式獲得有關衝突的更多資訊。

$gitstatus Onbranchfeature1 Youhaveunmergedpaths. (fixconflictsandrun"gitcommit") Unmergedpaths: (use"gitadd..."tomarkresolution) bothadded:README.md nochangesaddedtocommit(use"gitadd"and/or"gitcommit-a") 我們現在將列印檔案README.md的內容,該檔案存在衝突。

$catREADME.md <<<<<<>>>>>>main 該檔案現在顯示了各種符號。

符號<<<<<<>>>>>>>後跟遠端分支名稱,即main,顯示嘗試合併的位置。

現在,我們將使用mergetool來解決衝突。

$gitmergetool Merging: README.md Normalmergeconflictfor'README.md': {local}:createdfile {remote}:createdfile 這將啟動meld(因為我們已將其設定為預設差異工具)。

請看下圖。

左窗格顯示在本地分支中對檔案README.md所做的編輯。

中間窗格包含為解決衝突所做的更改結果。

右窗格顯示在遠端分支(即我們要合併的分支)中的編輯內容,即main。

我們可以選擇保留本地和遠端更改或其中之一。

我們將選擇保持遠端分支更改如下。

然後我們將儲存並退出meld工具。

我們將列印README.md檔案並檢視更新。

$catREADME.md #Upwork Upworkprojects 我們現在將更改提交到Git。

$gitcommit-m"mergedfrommain" [feature13c39d7b]mergedfrommain 我們現在將執行gitdiff命令來檢查feature1和main分支之間的衝突。

$gitdifffeature1main 我們將檢查feature1分支的狀態。

$gitstatus Onbranchfeature1 Untrackedfiles: (use"gitadd..."toincludeinwhatwillbecommitted) README.md.orig 它顯示了一個檔案README.md.orig,它是在合併時由mergetool建立的。

執行以下命令將其刪除: $gitclean-f 因此,我們已經成功解決了使用Git的mergetool合併兩個分支時的衝突。

相關文章-GitMerge Git合併倉庫 Git撤消合併 在Git中合併分支時快進操作 在Git中合併分支而不使用快進 相關文章-GitMergetool Git合併倉庫 Git撤消合併 在Git中合併分支時快進操作 在Git中合併分支而不使用快進 從Git中的分支中刪除提交重新命名本地和遠端Git分支 reportthisad xx



請為這篇文章評分?