解決 Git 衝突 (Conflict) 的完整指南
更新日期: 2024 年 12 月 9 日
本文為 Git 指令基本介紹教學,第 5 篇:
- Git 新手入門指南
- Git 分支與版本控制入門指南
- Git merge 與 rebase 初學者指南
- Git Reset:退回版本與分支拆分指南
- 解決 Git 衝突 (Conflict) 的完整指南 👈 所在位置
若已有基本認識,可前往閱讀 GitHub 操作指令教學 系列
在使用 Git 進行版本控制時,當兩個分支嘗試合併,且修改的區域過於接近時,可能會發生衝突 (Conflict)。
本文將向新手介紹如何識別、解決衝突,以及使用正確的指令完成合併。
什麼是 Git 衝突?
當兩個分支中有相同檔案的重疊修改,Git 無法自動合併這些變更時,就會產生衝突。
例如:
master
分支對檔案的某一部分進行了修改。feature
分支在相同位置進行了不同的修改。
執行 git merge
或 git rebase
時,Git 會提示衝突,並要求手動解決。
衝突時的檔案內容
當發生衝突時,Git 會在衝突檔案中新增標記,提示衝突的具體位置。以下是範例檔案內容:
<<<<<<< HEAD
這是 master 分支的內容。
=======
這是 feature 分支的內容。
>>>>>>> feature
衝突標記的解讀
<<<<<<< HEAD
:表示HEAD
分支(當前分支)的內容。=======
:分隔符,分隔兩個分支的變更。>>>>>>> feature
:表示另一個分支(例如feature
)的內容。
解決衝突的步驟
確認衝突檔案
執行合併或重整基底 (rebase) 後,Git 會列出衝突檔案:
git status
範例輸出:
both modified: example.txt
編輯檔案並解決衝突
打開衝突檔案,移除 Git 的衝突標記,並手動合併內容。
例如:
這是 master 和 feature 分支合併後的內容。
標記衝突已解決
完成修改後,將修復的檔案加入暫存區:
git add example.txt
提交或繼續操作
在解決衝突後,需要根據使用的合併方式選擇合適的指令來完成操作:
如果使用 git merge
當進行合併操作(git merge
)時,解決衝突後需要提交以完成合併。執行以下指令:
git commit -m "解決衝突並完成合併"
這將生成一個新的合併提交節點,將兩個分支的變更整合到一起。
如果使用 git rebase
當進行重整基底操作(git rebase
)時,解決衝突後需要繼續完成剩餘的基底變更。
執行以下指令:
git rebase --continue
Git 會自動應用剩餘的提交,直到重整基底完成。
如果再次發生衝突,重複上述解決步驟,直到所有變更應用完畢。
小提醒
- 確保在解決衝突後,所有相關檔案已使用
git add
加入暫存區,否則無法執行commit
或rebase --continue
。 - 在團隊協作中,請務必清楚記錄解決衝突的內容,方便未來的追蹤與審查。
衝突的預防措施
- 頻繁同步分支
維持分支與遠端儲存庫的同步,可減少衝突的機率:git pull origin main
- 分支專注單一功能
每個分支應該專注於單一功能或修復,避免多重修改導致衝突。 - 明確溝通與分工
團隊合作時,提前協商修改計劃,避免重疊編輯。
結語
Git 衝突是版本控制中常見的情境,但只要掌握基本的處理流程,就能快速解決問題。無
論是使用 git merge
還是 git rebase
,遵循正確的步驟,編輯衝突檔案並完成提交,都能確保專案的穩定性與一致性。