繼上一篇簡單介紹 Git 以及用 GitHub 發表網站,我再繼續練習幾個進階的指令,我自己覺得 Branch 跟 Merge 蠻有趣的。
參考學習資源:為你自己學 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"
Git 預設是在 master
或 main
分支,我們來 創建並切換到 feature-branch
:
git branch feature-branch # 建立新分支
git switch feature-branch # 切換到新分支
📌 你現在在 feature-branch
分支上,這時候來修改 index.py
。
echo "print('Hello, world')" >> index.py
git add index.py
git commit -m "Update index.py on feature-branch"
master
分支,看看變化git switch main
cat index.txt
📌 你會發現 index.py
仍然顯示:
Hello, Git
這是因為 我們的修改只在 feature-branch
,還沒合併到 main
。
feature-branch
到 master
現在我們想把 feature-branch
的修改合併到 master
:
git merge feature-branch
📌 成功合併後,查看 index.py
:
cat index.py
現在應該會顯示:
Hello, Git
Hello, world
🎉 合併成功!
讓我們手動製造一個 合併衝突(Merge Conflict),以學習如何解決:
master
分支修改 index.txt
:(有點懶得寫程式;p 先用txt.文字檔 示範)記得要先 cd 到之前創立的資料夾git switch master
echo "Main branch change" >> index.txt
git add index.txt
git commit -m "Modify index.txt in master"
檢查出現了新的.txt檔案
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"
master
並嘗試合併:git switch master
git merge feature-branch
💥 這時候會產生 Merge 衝突,Git 會顯示:
CONFLICT (content): Merge conflict in index.txt
Automatic merge failed; fix conflicts and then commit the result.
index.txt
,你會看到:可以用 VS Code 開來看,綠色是原本的程式碼,藍色是想要修正的文字,兩者有衝突不能合併
Hello from main branch
<<<<<<< HEAD
Main branch change
=======
Feature branch change
>>>>>>> feature-branch
可以選擇,要接受哪一個版本或是兩個都接受/拒絕
Hello from main branch
Main branch change
Feature branch change
git add index.txt
git commit -m "Resolve merge conflict between main and feature-branch"
🎉 成功解決 Merge 衝突!
補充說明,如果是兩台不同電腦協作,就需要用git pull
和 git push
的方式將程式碼傳到 git 共用專案中再下載協作。