Git 是开发者最常用的工具之一,但很多人只用到了冰山一角。本文整理了一些实用的进阶技巧。
1. 交互式 Rebase:优雅地整理提交历史
当你想在推送前整理提交记录时:
# 整理最近 5 个提交
git rebase -i HEAD~5
这会打开一个交互式编辑器,你可以:
- pick:保留该提交
- squash:将提交合并到前一个
- reword:修改提交信息
- drop:丢弃该提交
💡 建议:永远不要对已经推送到远程的分支做 rebase,这会导致团队历史混乱。
2. Cherry-pick:精准搬运提交
当你只需要某个分支上的某个特定提交时:
# 从其他分支拾取某个提交到当前分支
git cherry-pick <commit-hash>
这在修复 bug 时特别有用——在 dev 分支修了 bug,想立即同步到 main 分支。
3. Stash 进阶用法
暂存时添加描述
git stash push -m "正在重构用户模块"
暂存部分文件
# 只暂存已暂存(staged)的文件
git stash --staged
查看暂存内容
# 查看暂存列表
git stash list
# 查看某个暂存的diff
git stash show -p stash@{0}
4. Bisect:二分法定位 Bug
当不知道哪个提交引入了 bug 时:
# 开始二分查找
git bisect start
# 标记当前版本为有bug
git bisect bad
# 标记一个已知正常的版本
git bisect good <old-commit-hash>
# Git会自动切换到中间版本,你测试后标记
git bisect good # 或 git bisect bad
# 找到问题提交后退出
git bisect reset
5. Reflog:你的安全网
Reflog 记录了 HEAD 的所有移动,即使你做了 reset --hard 也能找回:
git reflog
# 找到误删的提交后恢复
git reset --hard <reflog-hash>
6. 实用别名配置
在 ~/.gitconfig 中添加:
[alias]
lg = log --oneline --graph --all --decorate
co = checkout
br = branch
ci = commit
st = status -sb
last = log -1 HEAD
unstage = reset HEAD --
总结
| 技巧 | 适用场景 |
|---|---|
| 交互式 rebase | 推送前整理提交历史 |
| cherry-pick | 跨分支搬运单个提交 |
| stash | 临时切换任务时保存工作 |
| bisect | 定位引入 bug 的提交 |
| reflog | 找回误操作的提交 |
掌握这些技巧后,Git 就不再只是 add → commit → push 的三件套,而是真正可靠的版本管理利器。