← 返回文章列表

Git 进阶技巧:那些你可能不知道的实用操作

整理日常开发中实用的 Git 进阶操作,包括交互式 rebase、cherry-pick、stash 进阶用法、bisect 调试等。

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 的三件套,而是真正可靠的版本管理利器。