Git 高级技巧:你未必知道的实用操作
Git 是程序员的日常工具,但很多人只用到了它的基本功能。本文分享一些实用的高级技巧。
1. 交互式 Rebase:整理提交历史
交互式 rebase 是整理 commit 历史的利器:
# 修改最近 5 个提交
git rebase -i HEAD~5
打开编辑器后,你可以:
pick a1b2c3d 添加用户登录功能
squash e4f5g6h 修复登录 bug # 合并到上一个提交
reword i7j8k9l 更新文档 # 修改提交信息
edit m0n1o2p 添加测试 # 暂停以修改文件
drop q3r4s5t 临时调试代码 # 丢弃此提交
pick u6v7w8x 优化性能
常用场景
- 合并零碎提交 — 把 "fix typo" 合并到主提交
- 修改历史提交信息 — reword
- 拆分提交 — edit 后分多次提交
- 删除不需要的提交 — drop
2. Cherry-pick:精准移植提交
当你只需要某个分支上的特定提交时:
# 将 commit abc123 移植到当前分支
git cherry-pick abc123
# 移植多个提交
git cherry-pick abc123 def456
# 移植一段提交范围(不含起点)
git cherry-pick abc123..ghi789
实际场景
# 在 feature 分支修了一个 bug,需要立即应用到 main
git checkout main
git cherry-pick <bugfix-commit-hash>
3. Git Bisect:二分查找 Bug
当引入了一个难以定位的 bug 时,用二分法快速找到罪魁祸首:
# 开始 bisect
git bisect start
# 标记当前版本为有 bug
git bisect bad
# 标记一个已知正常的版本
git bisect good v1.0.0
# Git 会自动检出中间版本,你测试后告知结果
git bisect good # 这个版本正常
# 或
git bisect bad # 这个版本有 bug
# 重复直到找到引入 bug 的提交
# 结束
git bisect reset
自动化 bisect
# 用脚本自动判断
git bisect start HEAD v1.0.0
git bisect run npm test # 测试脚本返回 0 = good,非 0 = bad
4. Git Worktree:多工作区并行开发
不需要 stash 或 clone 多份代码,直接创建工作树:
# 在 ../project-feature 目录创建一个工作树,切换到 feature 分支
git worktree add ../project-feature feature-branch
# 在 ../project-hotfix 创建一个工作树,基于 main 创建新分支
git worktree add -b hotfix-branch ../project-hotfix main
# 查看所有工作树
git worktree list
# 删除工作树
git worktree remove ../project-feature
适合场景:正在开发功能时突然要修一个紧急 bug,不用 stash,直接开一个 worktree 修 bug。
5. Stash 的高级用法
# 带消息 stash
git stash push -m "WIP: 用户列表分页"
# stash 指定文件
git stash push -m "暂存配置文件" config.json
# stash 包括未跟踪文件
git stash -u
# 查看所有 stash
git stash list
# 应用但不删除 stash
git stash apply stash@{0}
# 交互式 stash(选择要暂存的代码块)
git stash -p
6. Reflog:救命稻草
当你误删了分支或 reset 了提交:
# 查看所有操作记录
git reflog
# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~3
# e4f5g6h HEAD@{1}: commit: 重要提交
# i7j8k9l HEAD@{2}: checkout: moving from main to feature
# 恢复到误删的提交
git reset --hard e4f5g6h
reflog 是本地的,只要你的提交曾被 Git 记录过,几乎都能找回来。
7. 其他实用技巧
搜索提交历史
# 搜索提交信息
git log --grep="登录"
# 搜索代码变更(谁添加/删除了这行代码)
git log -S "function handleClick" --oneline
# 查看某文件的完整修改历史
git log -p --follow src/App.js
修改上一个提交
# 添加文件到上一个提交
git add forgotten-file.js
git commit --amend --no-edit
# 修改上一个提交的信息
git commit --amend -m "新的提交信息"
清理未跟踪文件
# 预览将要删除的文件
git clean -n
# 删除未跟踪文件
git clean -f
# 删除未跟踪文件和目录
git clean -fd
# 删除被 .gitignore 忽略的文件
git clean -x
Blame 查看每行最后修改
# 查看文件每行的修改者和时间
git blame src/App.js
# 只看第 10-20 行
git blame -L 10,20 src/App.js
总结
| 技巧 | 场景 |
|---|---|
| 交互式 rebase | 整理提交历史 |
| cherry-pick | 移植特定提交 |
| bisect | 二分查找 bug |
| worktree | 多分支并行开发 |
| stash -p | 部分暂存 |
| reflog | 恢复误操作 |
| log -S | 搜索代码变更历史 |
Git 是一个功能极其强大的工具。掌握这些高级技巧,你的版本控制能力将大幅提升!
📖 相关阅读
📝
前端开发
2026-07-31
SEO超级外链源码 v3.1让网站外链暴涨,收录飙升!
基于PHP开发的SEO超级外链自动发送系统,内置 2000+ 外链目标URL,一键提交,自动轮换UA、模拟多语言浏览器访问,配合 10大收录增强措施,让你的域名在搜索引擎中快速曝光、批量收录。
#SEO超级外链工具#网站源码#php源码
6 分钟阅读
阅读全文 →
📝
前端开发
2026-07-19
零依赖零构建原生静态 AI 工具导航页|可直接部署开源模板
一款零依赖、零构建的 AI 工具导航页。所有源码为原生 HTML / CSS / JavaScript,双击 index.html 即可在浏览器打开,也可直接上传到任意静态服务器(虚拟主机、对象存储、GitHub Pages 等)使用,全程
#HTML源码#导航源码#静态网页模板
6 分钟阅读
阅读全文 →
🔗
前端开发
2024-12-15
React 开发最佳实践指南(2024 版)
从组件设计到状态管理,从性能优化到代码规范,全面总结 React 开发中的最佳实践。
#React#前端#最佳实践
12 分钟阅读
阅读全文 →