iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

30天 Git 版本控制實戰筆記系列 第 7

Day 7:合併衝突處理實戰

  • 分享至 

  • xImage
  •  

今日目標
• 學習什麼是合併衝突
• 模擬多人同時開發的衝突情境
• 掌握手動解決衝突的方法
• 理解團隊協作中衝突產生的原因
重要概念:為什麼會有衝突?
衝突產生的情境:
在團隊開發中,兩個開發者同時從相同的版本開始工作:
初始狀態(上週五下班):
main: A---B

週一同時開工:
小明從 B 建立分支 → 修改同一檔案
小華也從 B 建立分支 → 修改同一檔案的同一行

結果:
C (小明的修改)
/
main: A---B

D (小華的修改)

當小華要合併時 → 衝突!
操作步驟:模擬同時開發
步驟1:設定共同起點

確保在專案資料夾

cd company-website

檢查目前狀態(這是我們的「共同起點」)

git status
git log --oneline -1

記住這個 commit,這是兩個開發者共同的起始點

步驟2:模擬開發者A(你)的工作

假設你是開發者A,建立功能分支開發

git checkout -b feature/developer-A

開發者A修改首頁標題

編輯 index.html,修改 h1 標籤:

假設這是開發者B,從同一個時間點建立分支

git checkout -b feature/developer-B

開發者B修改同一個位置!

編輯 index.html,修改相同的** h1 標籤:**

開發者A先完成,合併到 main(通常是 fast-forward)

git merge feature/developer-A

查看合併結果

git log --oneline -2
步驟5:開發者B嘗試合併 → 產生衝突!

現在開發者B想要合併(這時會衝突!)

git merge feature/developer-B
現在應該看到衝突訊息:
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
步驟6:查看和理解衝突

查看衝突狀態

git status

顯示 "both modified: index.html"

查看衝突內容

cat index.html
衝突標記解釋:

<!-- 解決衝突:結合兩個開發者的想法 -->
<h1>歡迎來到我們專業設計的網站</h1>
<p>結合開發者A和B的設計理念,提供最佳使用體驗</p>

<footer>
    <p>&copy; 2024 我們公司. 版權所有.</p>
</footer>

標記衝突已解決

git add index.html

完成合併(Git 會產生合併提交)

git commit

編輯器會開啟,可以修改合併訊息或直接 :wq 儲存

步驟9:清理和檢視結果

查看最終狀態

git status

查看合併歷史圖

git log --oneline --graph -5

清理功能分支

git branch -d feature/developer-A
git branch -d feature/developer-B

推送最終結果

git push origin main
重要概念總結
衝突產生的核心原因:

  1. 同時性:兩個開發者從相同起點開始
  2. 重疊性:修改了同一檔案的同一行
  3. 並行性:各自獨立開發,未即時同步
    現實工作情境:
    星期一早上 9:00:
  • 小明和小華都 git pull 了最新的 main 分支
  • 小明建立 feature/login 分支改登入頁面
  • 小華建立 feature/ui 分支也改了登入頁面的標題
  • 下午小明先合併成功
  • 小華合併時 → 衝突!
    預防衝突的方法:

1. 開發前拉取最新版本

git pull origin main

2. 功能分支經常與 main 同步

git checkout feature/my-branch
git merge main

3. 小步提交,頻繁推送

git commit -m "完成小功能"
git push origin feature/my-branch

4. 團隊溝通避免修改相同檔案

今日學習重點
• ✅ 理解「同時開發」導致衝突的原理
• ✅ 模擬真實團隊協作情境
• ✅ 掌握識別和解決衝突的方法
• ✅ 學習預防衝突的最佳實踐


上一篇
Day 6:分支管理入門實戰
下一篇
Day 8:Pull Request 工作流程與 Code Review
系列文
30天 Git 版本控制實戰筆記8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言