以下是 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 | 部分检出大仓库 |
掌握这些命令后,你将能:
- ✅ 优雅管理复杂历史
- ✅ 高效解决团队协作问题
- ✅ 精准控制代码变更
- ✅ 深度优化仓库性能
最后忠告:高阶命令往往伴随风险,操作前务必:
- 备份重要分支
- 确认操作影响范围
- 团队协作时提前沟通!