以下是 Git 高階命令分享,涵蓋高效協作、歷史重構、問題排查等場景,助你成為 Git 高手:
一、歷史重構與清理
1. 交互式變基(改寫歷史)
git rebase -i HEAD~3 # 修改最近3次提交
操作選項:
reword
:修改提交信息edit
:暫停修改提交內容squash
:合并到前一個提交drop
:刪除提交
用途:合并瑣碎提交、修改歷史信息、清理無用提交。
2. 徹底刪除歷史文件(敏感信息清理)
git filter-repo --path <file> --invert-paths # 從所有提交中刪除文件
注意:需先安裝
git-filter-repo
(非內置命令),適用于清理密碼、大文件等。
二、精準提交操作
1. 選擇性提交(部分暫存)
git add -p # 交互式選擇代碼塊暫存
- 按
s
拆分代碼塊,y/n
決定是否暫存 - 用途:將同一文件中的多個修改拆分成不同提交。
2. 揀選提交(移植特定提交)
git cherry-pick <commit_id> # 將指定提交應用到當前分支
git cherry-pick -x <commit_id> # 保留原提交信息(推薦)
場景:修復 Bug 時,將補丁從開發分支移植到生產分支。
三、高級撤銷與修復
1. 引用日志(找回誤刪提交)
git reflog # 查看所有 HEAD 變更記錄
git reset --hard HEAD@{2} # 恢復到 reflog 中的第2個狀態
救急:找回
reset --hard
刪除的提交或誤刪分支。
2. 修復提交(修改最后一次提交)
git commit --amend # 修改最后一次提交信息
git commit --amend --no-edit # 只修改提交內容(不改變信息)
技巧:先
git add
修改文件,再amend
可避免產生新提交。
四、復雜合并與沖突處理
1. 三方合并(解決多分支沖突)
git merge -s recursive -Xours <branch> # 沖突時優先保留當前分支代碼
git merge -s recursive -Xtheirs <branch> # 沖突時優先保留目標分支代碼
適用場景:批量處理大量沖突(如合并長期分支)。
2. 使用 rerere
自動解決重復沖突
git config --global rerere.enabled true # 開啟自動沖突記憶
- 首次手動解決沖突后,Git 會記住方案,后續相同沖突自動解決。
五、深度排查與調試
1. 二分法定位問題提交
git bisect start # 開始二分查找
git bisect bad # 標記當前提交有問題
git bisect good <commit> # 標記已知正常的提交
# Git 自動切到中間提交 → 測試后標記 good/bad → 最終定位問題提交
git bisect reset # 結束查找
2. 追蹤代碼行歷史
git blame -L 20,30 <file> # 查看文件第20-30行的修改記錄
git blame -C <file> # 識別從其他文件移動來的代碼
六、子模塊管理(多倉庫協作)
git submodule add <repo_url> <path> # 添加子模塊
git submodule update --init --recursive # 初始化并更新子模塊
git clone --recurse-submodules <repo_url> # 克隆時包含子模塊
用途:在項目中嵌套其他倉庫(如公共組件庫)。
七、高級配置與鉤子
1. 自定義鉤子(自動化操作)
# 在 .git/hooks/ 中創建可執行腳本
pre-commit # 提交前檢查代碼規范
post-receive # 推送到遠程后觸發部署
示例:用
pre-commit
鉤子自動運行 ESLint 檢查。
2. 配置別名(簡化命令)
git config --global alias.st "status -s"
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
用法:
git st
代替git status -s
,git lg
查看美觀日志。
八、性能優化
1. 部分克隆(減少倉庫體積)
git clone --filter=blob:none <repo_url> # 不下載文件對象(僅需時拉取)
適用場景:大型倉庫(如含大量二進制文件)。
2. 稀疏檢出(只獲取部分目錄)
git clone --sparse <repo_url>
git sparse-checkout set dir1 dir2 # 指定需要檢出的目錄
九、危險操作(謹慎使用!)
1. 強制推送覆蓋歷史
git push --force-with-lease # 比 --force 安全(檢查遠程是否被他人更新)
原則:僅限私有分支,公共分支需團隊協商。
2. 徹底重置分支
git reset --hard <commit> && git push --force # 丟棄所有后續提交
警告:會破壞協作分支,必須提前通知所有協作者!
十、高階工作流
1. 補丁工作流(跨倉庫提交)
git format-patch -1 <commit> # 生成 .patch 文件
git am < patch_file # 應用補丁
場景:給開源項目提交代碼(郵件發送補丁)。
2. 多分支同步維護
# 將 hotfix 同時應用到多個分支
git rebase --onto main hotfix~5 hotfix # 重構 hotfix 分支基線
git checkout feature
git rebase hotfix # 將 feature 分支基于新 hotfix
總結:高階命令核心價值
命令 | 核心作用 |
---|---|
rebase -i | 歷史重構(合并/修改/刪除提交) |
filter-repo | 徹底清理歷史文件 |
bisect | 高效定位問題提交 |
cherry-pick -x | 精準移植提交 |
reflog | 找回誤操作記錄 |
submodule | 管理嵌套倉庫 |
sparse-checkout | 部分檢出大倉庫 |
掌握這些命令后,你將能:
- ? 優雅管理復雜歷史
- ? 高效解決團隊協作問題
- ? 精準控制代碼變更
- ? 深度優化倉庫性能
最后忠告:高階命令往往伴隨風險,操作前務必:
- 備份重要分支
- 確認操作影響范圍
- 團隊協作時提前溝通!