深入淺出進階 Git 指令:分支管理、合併策略與版本還原全攻略

這篇文章將介紹一些常用的進階 Git 指令,主要涵蓋分支管理、合併衝突、版本回退等操作,這些指令在日常開發中非常實用,能夠幫助您更高效地管理版本控制,提升團隊協作效率。
分支管理
查看所有分支
這條指令會列出所有本地和遠端的分支。
顯示分支詳細信息
這會顯示每個分支的最新提交及其追蹤的遠端分支,便於了解分支的狀態。
創建並切換到新分支
1
| git checkout -b new-branch-name
|
這條指令會創建一個新的分支並立即切換到該分支,方便快速開始新功能的開發。
刪除本地分支
1
| git branch -d branch-name
|
若該分支有未合併的變更,可強制刪除:
1
| git branch -D branch-name
|
重命名分支
1
| git branch -m new-branch-name
|
這會將當前分支重命名。
推送新分支到遠端
1
| git push origin new-branch-name
|
將本地新分支推送到遠端倉庫,供團隊成員使用。
合併與衝突解決
合併分支
將指定分支合併到當前分支。
使用 --no-ff
保持合併歷史
1
| git merge --no-ff branch-name
|
這樣可以保留合併歷史,便於追蹤分支的合併情況。
解決合併衝突
當合併出現衝突時,Git 會標記出衝突部分,手動解決後再提交:
1 2
| git add conflicted-file git commit
|
使用合併工具自動解決衝突
這會啟動配置的合併工具,幫助自動解決衝突。
放棄合併
如果合併過程不如預期,您可以使用此指令放棄合併。
還原與重置
還原單個文件
1
| git checkout -- filename
|
這會將文件還原到上次提交的狀態。
回退提交
如果您需要撤銷最近的提交,但保留變更,可以使用:
如果要撤銷最近兩次提交,可以使用:
如果要徹底撤銷變更並回到提交前的狀態:
重置的影響
--soft
: 只回退提交,保留暫存區和工作目錄的變更。--mixed
(默認):回退提交並重置暫存區,但保留工作目錄的變更。--hard
: 回退提交並重置暫存區和工作目錄,所有未提交的變更將被刪除。
還原遠端提交
這會生成一個新的提交來撤銷指定的提交,且不會影響提交歷史。
進階的 rebase 操作
交互式 rebase
這可以讓您重新排序、修改或合併最近的提交,保持提交歷史的整潔。
解決 rebase 衝突
- 當出現衝突時,手動編輯衝突文件以解決問題。
- 添加解決後的文件:
- 繼續 rebase:
rebase vs merge
- Rebase:重寫提交歷史,使歷史更線性,適合在私有分支上使用。
- Merge:保留分支歷史,適合在公共分支上使用,能清楚看到分支的合併點。
選擇合適的方法取決於團隊的工作流程和需求。
其他進階操作
cherry-pick
指定提交
1
| git cherry-pick commit-hash
|
選擇一個提交並將其應用到當前分支。適用於需要從一個分支挑選特定變更到另一個分支的情況。
stash
暫存進階用法
保存帶有訊息的 stash
查看所有 stash 條目
應用特定 stash
1
| git stash apply stash@{index}
|
彈出 stash(應用並刪除)
刪除特定 stash
1
| git stash drop stash@{index}
|
reflog
檢查所有 Git 操作
顯示您所有 Git 操作的歷史記錄,方便查找回退點。
log --graph
視覺化提交歷史
1
| git log --graph --oneline --all
|
這會顯示一個圖形化的提交歷史,方便理解分支和合併的過程。
diff --staged
比較已暫存的文件變更
比較已被添加到暫存區的變更,這在提交前檢查內容時非常有用。
tag
標記版本
創建輕量標籤
創建註釋標籤
1
| git tag -a v1.0.0 -m "Release version 1.0.0"
|
推送標籤
實際案例
多人協作中的 rebase 使用
在多人協作的專案中,使用 rebase
可以保持提交歷史的整潔。例如,當您在功能分支上工作,並且需要將最新的 main
分支變更整合過來,可以使用:
1 2
| git checkout feature-branch git rebase main
|
這樣可以將 feature-branch
的提交基於最新的 main
分支,避免不必要的合併提交。
使用 stash
管理臨時變更
當您正在處理一個功能,但需要切換到另一個分支修復緊急問題,可以使用 stash
暫存當前變更:
1 2 3 4 5
| git stash save "正在開發新功能" git checkout urgent-fix
git checkout feature-branch git stash pop
|
這樣可以方便地在不同任務間切換,而不會丟失未完成的工作。
參考資源