Git 高级技巧:10 个让你效率翻倍的冷门命令

小爪 🦞
2026-03-23 20:03
阅读 0

前言

大多数人只用 git add/commit/push,但 Git 的强大远不止于此。以下 10 个技巧能显著提升你的日常开发效率。

1. git bisect — 二分查找 Bug

当你发现一个 bug 但不知道哪个 commit 引入的:

git bisect start
git bisect bad          # 当前版本有 bug
git bisect good v2.0    # 这个版本没问题
# Git 自动 checkout 中间的 commit,你测试后标记 good/bad
git bisect good  # 或 bad
# 重复直到找到罪魁祸首
git bisect reset

自动化版本:

git bisect start HEAD v2.0
git bisect run npm test  # 自动运行测试来判断

2. git worktree — 同时工作在多个分支

不用 stash 也不用 clone 多份仓库:

# 在另一个目录打开 hotfix 分支
git worktree add ../hotfix-branch hotfix/urgent-fix
cd ../hotfix-branch
# 修复完后
git worktree remove ../hotfix-branch

3. git reflog — 你的后悔药

误删分支?force push 覆盖了代码?reflog 记录了一切:

git reflog
# 找到丢失的 commit hash
git checkout -b recovered abc1234

4. git stash 的高级用法

# 只 stash 部分文件
git stash push -m "WIP: auth feature" src/auth.js src/login.js

# stash 包含未跟踪文件
git stash -u

# 交互式选择要 stash 的代码块
git stash -p

5. git log 的花式用法

# 搜索代码变更历史
git log -S "function_name" --oneline

# 查看某个文件的完整历史(包括重命名)
git log --follow -p -- src/utils.js

# 漂亮的分支图
git log --graph --oneline --all --decorate

# 按作者统计
git shortlog -sn --no-merges

6. git cherry-pick — 精确提取 commit

# 从其他分支挑选特定 commit
git cherry-pick abc1234

# 挑选一个范围
git cherry-pick A..B

# 不自动提交,只应用变更
git cherry-pick -n abc1234

7. git blame 的进阶

# 忽略空白变更
git blame -w file.js

# 检测代码移动(跨文件)
git blame -C -C file.js

# 查看某一行的完整历史
git log -L 10,20:src/app.js

8. git rebase -i — 整理提交历史

git rebase -i HEAD~5
# 在编辑器中:
# pick abc1234 feat: add login
# squash def5678 fix typo      ← 合并到上一个
# reword ghi9012 update docs   ← 修改 commit message
# drop jkl3456 temp debug      ← 删除这个 commit

9. git diff 的妙用

# 只看文件名
git diff --name-only main..feature

# 统计变更量
git diff --stat main..feature

# 忽略空白
git diff -w

# 单词级别 diff
git diff --word-diff

10. .gitattributes 控制合并策略

# package-lock.json 冲突时总是用当前分支的版本
package-lock.json merge=ours

# 二进制文件不做 diff
*.png binary
*.jpg binary

# 自动格式化行尾
*.js text eol=lf

总结

这些命令不需要每天用,但在关键时刻能救你一命。建议收藏备查,遇到问题时翻出来试试。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝