
基本指令會了,但真實世界的開發可沒那麼單純 — 這篇搞定分支管理和合併衝突。
先講結論
日常開發中,分支管理和衝突處理佔了你用 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 commitVS Code 的內建合併工具就很好用,或者跑 git mergetool 啟動你設定的合併工具。
策略性撤退
git merge --abort衝突太多暫時不想處理?直接放棄合併,回到合併前的狀態。沒什麼好丟臉的,策略性撤退也是一種智慧。
還原單個文件
git checkout -- filename把文件還原到上次提交的狀態。注意,這個操作不可逆,還原後你的修改就找不回來了。
分支管理和衝突處理搞定了?接下來看 進階 Git 指令(下) 學版本回退、stash、cherry-pick 這些救命技能。
延伸閱讀
- Git 基本指令 — 需要複習基礎的話回去看看
- 進階 Git 指令(下) — 版本回退、stash、cherry-pick
- Merge vs Rebase — 深入了解兩種合併策略
- Git Flow — 結構化的分支管理模型