3.3 合併與衝突處理#
合併分支:git merge#
在功能分支上完成開發後,把它合併回 main:
git switch main # 先切到要被合併進去的分支
git merge feature/login # 把 feature/login 合併進來
Git 會自動處理大多數情況:
- Fast-forward:main 在分支分出後沒有新提交,直接把指標往前移
- 自動合併:兩邊都有新提交但改的是不同地方,Git 自動合併並產生一個 merge commit
發生衝突(Conflict)怎麼辦?#
當兩個分支改了同一個檔案的同一行,Git 無法決定要用哪一版,就會發生衝突:
Auto-merging app.py
CONFLICT (content): Merge conflict in app.py
Automatic merge failed; fix conflicts and then commit the result.
打開衝突的檔案,會看到 Git 標記出的衝突區塊:
<<<<<<< HEAD
print("歡迎光臨")
=======
print("Welcome!")
>>>>>>> feature/login
<<<<<<< HEAD到=======:目前分支(main)的版本=======到>>>>>>> feature/login:要合併進來的版本
手動解衝突三步驟#
第一步:打開衝突檔案,手動編輯成你想要的樣子
刪掉 <<<<<<<、=======、>>>>>>> 這些標記,留下正確的內容(可能是其中一版,也可能是融合兩版):
print("歡迎光臨 Welcome!")
第二步:把解好的檔案加入暫存區
git add app.py
第三步:完成合併提交
git commit -m "合併 feature/login,解決 app.py 衝突"
想放棄這次合併?
git merge --abort可以回到合併前的狀態。減少衝突的心法:分支小而短命、勤勞地 merge main 進自己的分支、團隊成員分工時盡量避免改同一個檔案。