Git 分支與合併:建立、切換、合併及衝突處理教學

Git 分支與合併:建立、切換、合併及衝突處理教學

更新於 發佈於 閱讀時間約 6 分鐘

繼上一篇簡單介紹 Git 以及用 GitHub 發表網站,我再繼續練習幾個進階的指令,我自己覺得 Branch 跟 Merge 蠻有趣的。

參考學習資源:為你自己學 Git 

🌱 Git 分支(Branch)練習

目標:

  • 建立新的分支
  • 在不同分支進行修改
  • 合併分支

✅ 1️⃣ 建立 Git 專案

📌 如果你還沒有專案,先建立一個新的 Git 儲存庫

mkdir git-branch-practice
cd git-branch-practice
git init # 初始化 Git
echo "print('Hello, Git')" > index.py
git add index.py
git commit -m "Initial commit on main"

✅ 2️⃣ 建立並切換到新分支

Git 預設是在 mastermain 分支,我們來 創建並切換到 feature-branch

git branch feature-branch  # 建立新分支
git switch feature-branch # 切換到新分支
raw-image


📌 你現在在 feature-branch 分支上,這時候來修改 index.py

echo "print('Hello, world')" >> index.py
git add index.py
git commit -m "Update index.py on feature-branch"

✅ 3️⃣ 回到 master 分支,看看變化

git switch main
cat index.txt

📌 你會發現 index.py 仍然顯示:

Hello, Git

這是因為 我們的修改只在 feature-branch,還沒合併到 main


✅ 4️⃣ 合併 feature-branchmaster

現在我們想把 feature-branch 的修改合併到 master

git merge feature-branch
raw-image

📌 成功合併後,查看 index.py

cat index.py

現在應該會顯示:

Hello, Git
Hello, world

🎉 合併成功!


🌋 處理 Merge 衝突

✅ 5️⃣ 製造 Merge 衝突

讓我們手動製造一個 合併衝突(Merge Conflict),以學習如何解決:

  1. master 分支修改 index.txt:(有點懶得寫程式;p 先用txt.文字檔 示範)記得要先 cd 到之前創立的資料夾
  2. git switch master
    echo "Main branch change" >> index.txt
    git add index.txt
    git commit -m "Modify index.txt in master"
檢查出現了新的.txt檔案

檢查出現了新的.txt檔案


  1. 切換回 feature-branch 並修改 index.txt
    git switch feature-branch
    echo "Feature branch change" >> index.txt
    git add index.txt
    git commit -m "Modify index.txt in feature branch"
  2. 回到 master 並嘗試合併
    git switch master
    git merge feature-branch

💥 這時候會產生 Merge 衝突,Git 會顯示:

raw-image
CONFLICT (content): Merge conflict in index.txt
Automatic merge failed; fix conflicts and then commit the result.

✅ 6️⃣ 解決 Merge 衝突

  1. 打開 index.txt,你會看到:
可以用 VS Code 開來看,綠色是原本的程式碼,藍色是想要修正的文字,兩者有衝突不能合併

可以用 VS Code 開來看,綠色是原本的程式碼,藍色是想要修正的文字,兩者有衝突不能合併

  1. Hello from main branch
    <<<<<<< HEAD
    Main branch change
    =======
    Feature branch change
    >>>>>>> feature-branch
  2. 手動修改檔案,解決衝突(合併兩個修改):
可以選擇,要接受哪一個版本或是兩個都接受/拒絕

可以選擇,要接受哪一個版本或是兩個都接受/拒絕

  1. Hello from main branch
    Main branch change
    Feature branch change
  2. 標記衝突已解決,提交變更
    git add index.txt
    git commit -m "Resolve merge conflict between main and feature-branch"

🎉 成功解決 Merge 衝突!

補充說明,如果是兩台不同電腦協作,就需要用git pullgit push 的方式將程式碼傳到 git 共用專案中再下載協作。


📌 總結指令

raw-image



avatar-img
越南放大鏡 X 下班資工系
13會員
60內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
留言
avatar-img
留言分享你的想法!
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。