Git是每个开发者的必备技能,但大多数人只会 git add、git commit、git push 这三板斧。今天,我来分享10个Git高级技巧,掌握这些操作,你的版本控制能力将超越90%的开发者。
技巧一:交互式暂存(Interactive Staging)
不想把所有修改都提交?使用 git add -p 可以逐块选择要暂存的代码。
git add -p
Git会逐个展示修改的代码块(hunk),你可以选择:
y— 暂存这个块n— 跳过s— 拆分成更小的块e— 手动编辑
实用场景:一次修改涉及多个功能,想分多次提交,保持git历史清晰。
技巧二:交互式Rebase(Interactive Rebase)
想修改最近几次提交的信息或合并提交?git rebase -i 是你的利器。
# 修改最近3次提交
git rebase -i HEAD~3
在打开的编辑器中,你可以:
pick— 保留提交reword— 修改提交信息squash— 合并到上一个提交drop— 删除提交
技巧三:Reflog — 时光倒流的救命稻草
误操作了?比如错误的reset或rebase?Reflog记录了HEAD的所有移动历史。
# 查看HEAD的移动历史
git reflog
# 回退到某个状态
git reset --hard HEAD@{2}
注意:Reflog只保留90天的记录,且只在本地有效。
技巧四:Bisect — 用二分法找Bug
知道某个commit引入了Bug,但不确定是哪个?git bisect 用二分查找帮你快速定位。
# 开始二分查找
git bisect start
git bisect bad # 标记当前版本有Bug
git bisect good v1.0 # 标记v1.0版本没有Bug
# Git会自动checkout中间版本,测试后标记
# 测试结果正常:
git bisect good
# 测试结果有Bug:
git bisect bad
# 找到问题commit后结束
git bisect reset
如果有100个commit,只需测试7次就能找到引入Bug的那个commit。
技巧五:Stash — 临时保存工作区
需要紧急切换分支,但当前修改还没完成?Stash可以临时保存你的工作区。
# 保存当前修改
git stash push -m "功能A开发中"
# 查看所有stash
git stash list
# 恢复最近的stash
git stash pop
# 恢复指定的stash(不删除记录)
git stash apply stash@{1}
# 删除某个stash
git stash drop stash@{0}
技巧六:Cherry-Pick — 精确移植提交
想把某个分支上的特定提交移植到当前分支?
# 移植单个commit
git cherry-pick abc1234
# 移植多个commit
git cherry-pick abc1234 def5678
# 移植但不自动提交(可以继续修改)
git cherry-pick --no-commit abc1234
技巧七:Blame — 追踪代码历史
想知道某一行代码是谁写的、为什么写的?
# 查看文件每一行的最后修改者
git blame filename.py
# 查看某几行
git blame -L 10,20 filename.py
# 忽略空格修改
git blame -w filename.py
技巧八:Worktree — 同时在多个分支工作
需要同时在多个分支上工作,但不想频繁stash和切换?
# 创建一个新的工作目录,检出指定分支
git worktree add ../hotfix-branch hotfix
# 查看所有工作目录
git worktree list
# 删除工作目录
git worktree remove ../hotfix-branch
技巧九:自动补全和别名
在 ~/.gitconfig 中添加常用别名,大幅提升效率:
[alias]
co = checkout
br = branch
ci = commit
st = status
lg = log --oneline --graph --decorate --all
unstage = reset HEAD --
last = log -1 HEAD --stat
git lg 效果:一行显示分支图形化历史,非常直观。
技巧十:Git Hooks — 自动化你的工作流
Git Hooks可以在特定事件触发时自动执行脚本。
常用场景:
- pre-commit:提交前自动运行代码检查(ESLint、Prettier)
- commit-msg:检查提交信息格式
- pre-push:推送前运行测试
推荐工具:Husky(Node.js项目),可以方便地管理Git Hooks。
总结
Git是一个功能极其强大的工具,以上10个技巧只是冰山一角。建议每个技巧都实际动手练习一下,在真正需要的时候才能信手拈来。
学习路径推荐:
- 先掌握基础命令(add/commit/push/pull/merge)
- 学习分支管理(branch/checkout/rebase)
- 掌握本文的高级技巧
- 了解Git内部原理(.git目录结构、对象模型)
你有什么Git使用心得?或者有什么Git难题想讨论?欢迎评论区留言!