cover

基本指令會了,但真實世界的開發可沒那麼單純 — 這篇搞定分支管理和合併衝突。

先講結論

日常開發中,分支管理和衝突處理佔了你用 Git 時間的一大半。學會這篇的指令,你在團隊協作時就不會手忙腳亂了。還沒熟 基本指令?先回去練。

分支管理全攻略

看清楚你的分支

git branch -a    # 列出所有本地和遠端分支
git branch -vv   # 顯示每個分支的最新提交和追蹤狀態

-vv 在你同時在好幾個分支上工作時簡直是救命恩人。不然你根本搞不清楚哪個分支追蹤哪個遠端。

建立、重命名、刪除

git checkout -b new-branch    # 建立並切換
git branch -m new-name        # 重命名當前分支
git branch -d branch-name     # 安全刪除(會檢查未合併的東西)
git branch -D branch-name     # 強制刪除(不管三七二十一)

小寫 -d 是安全刪除,大寫 -D 是直接砍。平時用 -d 就好,除非你很確定要放棄那個分支上的所有工作。

推送新分支到遠端

git push origin new-branch-name

推完之後團隊成員就能看到你的分支了。

合併與衝突處理

基本合併

git merge branch-name

—no-ff 的重要性

git merge --no-ff branch-name

預設的 merge 如果可以 fast-forward 就不會產生合併 commit。加了 --no-ff 會強制產生一個合併 commit,讓 git log 更清楚地看到「這裡合併了一個分支進來」。

想深入了解 merge 和 rebase 的差別?看 Merge vs Rebase

衝突來了,別慌

合併衝突其實沒那麼可怕。Git 會標記出衝突的部分,你手動解決後再提交就好:

# 解決衝突後
git add conflicted-file
git commit

VS Code 的內建合併工具就很好用,或者跑 git mergetool 啟動你設定的合併工具。

策略性撤退

git merge --abort

衝突太多暫時不想處理?直接放棄合併,回到合併前的狀態。沒什麼好丟臉的,策略性撤退也是一種智慧。

還原單個文件

git checkout -- filename

把文件還原到上次提交的狀態。注意,這個操作不可逆,還原後你的修改就找不回來了。


分支管理和衝突處理搞定了?接下來看 進階 Git 指令(下) 學版本回退、stash、cherry-pick 這些救命技能。


延伸閱讀