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

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

進階語法指南

這篇文章將介紹一些常用的進階 Git 指令,主要涵蓋分支管理、合併衝突、版本回退等操作,這些指令在日常開發中非常實用,能夠幫助您更高效地管理版本控制,提升團隊協作效率。


分支管理

查看所有分支

1
git branch -a

這條指令會列出所有本地和遠端的分支。

顯示分支詳細信息

1
git branch -vv

這會顯示每個分支的最新提交及其追蹤的遠端分支,便於了解分支的狀態。


創建並切換到新分支

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

將本地新分支推送到遠端倉庫,供團隊成員使用。


合併與衝突解決

合併分支

1
git merge branch-name

將指定分支合併到當前分支。

使用 --no-ff 保持合併歷史

1
git merge --no-ff branch-name

這樣可以保留合併歷史,便於追蹤分支的合併情況。


解決合併衝突

當合併出現衝突時,Git 會標記出衝突部分,手動解決後再提交:

1
2
git add conflicted-file
git commit

使用合併工具自動解決衝突

1
git mergetool

這會啟動配置的合併工具,幫助自動解決衝突。


放棄合併

1
git merge --abort

如果合併過程不如預期,您可以使用此指令放棄合併。


還原與重置

還原單個文件

1
git checkout -- filename

這會將文件還原到上次提交的狀態。


回退提交

如果您需要撤銷最近的提交,但保留變更,可以使用:

1
git reset --soft HEAD^

如果要撤銷最近兩次提交,可以使用:

1
git reset --soft HEAD~2

如果要徹底撤銷變更並回到提交前的狀態:

1
git reset --hard HEAD^

重置的影響

  • --soft: 只回退提交,保留暫存區和工作目錄的變更。
  • --mixed(默認):回退提交並重置暫存區,但保留工作目錄的變更。
  • --hard: 回退提交並重置暫存區和工作目錄,所有未提交的變更將被刪除。

還原遠端提交

1
git revert commit-hash

這會生成一個新的提交來撤銷指定的提交,且不會影響提交歷史。


進階的 rebase 操作

交互式 rebase

1
git rebase -i HEAD~3

這可以讓您重新排序、修改或合併最近的提交,保持提交歷史的整潔。

解決 rebase 衝突

  1. 當出現衝突時,手動編輯衝突文件以解決問題。
  2. 添加解決後的文件:
1
git add conflicted-file
  1. 繼續 rebase:
1
git rebase --continue

rebase vs merge

  • Rebase:重寫提交歷史,使歷史更線性,適合在私有分支上使用。
  • Merge:保留分支歷史,適合在公共分支上使用,能清楚看到分支的合併點。

選擇合適的方法取決於團隊的工作流程和需求。


其他進階操作

cherry-pick 指定提交

1
git cherry-pick commit-hash

選擇一個提交並將其應用到當前分支。適用於需要從一個分支挑選特定變更到另一個分支的情況。


stash 暫存進階用法

保存帶有訊息的 stash

1
git stash save "描述訊息"

查看所有 stash 條目

1
git stash list

應用特定 stash

1
git stash apply stash@{index}

彈出 stash(應用並刪除)

1
git stash pop

刪除特定 stash

1
git stash drop stash@{index}

reflog 檢查所有 Git 操作

1
git reflog

顯示您所有 Git 操作的歷史記錄,方便查找回退點。


log --graph 視覺化提交歷史

1
git log --graph --oneline --all

這會顯示一個圖形化的提交歷史,方便理解分支和合併的過程。


diff --staged 比較已暫存的文件變更

1
git diff --staged

比較已被添加到暫存區的變更,這在提交前檢查內容時非常有用。


tag 標記版本

創建輕量標籤

1
git tag v1.0.0

創建註釋標籤

1
git tag -a v1.0.0 -m "Release version 1.0.0"

推送標籤

1
git push origin v1.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

這樣可以方便地在不同任務間切換,而不會丟失未完成的工作。


參考資源


深入淺出進階 Git 指令:分支管理、合併策略與版本還原全攻略
https://terryyaowork.github.io/git/20240913/1497149976/
作者
Terry Yao
發布於
2024年9月13日
許可協議