值得写进 gitconfig 的实用配置
Git 的默认配置是十几年前为 Linux 内核团队定的,对今天的日常开发有不少"反直觉"的地方。这篇列出值得一次性改掉的条目。
一、必须改的几条
[init]
defaultBranch = main # 新仓库默认 main,不再 master
[pull]
ff = only # pull 只允许快进,禁止自动 merge
pull.ff = only 是最值得改的一条。默认的 git pull 会悄悄产生 merge commit,日积月累让历史变成毛线团。设成 only 后,遇到分叉会直接报错,逼你明确选择 rebase 还是 merge。
如果你偏好自动 rebase:
[pull]
rebase = true
二、减少摩擦的自动化
[fetch]
prune = true # fetch 时自动清理已删除的远程分支
[merge]
ff = false # 合并时总是产生 merge commit,保留分支意图
[rebase]
autoStash = true # rebase 前自动 stash,结束后自动恢复
[rerere]
enabled = true # 记住冲突解决方案,重复冲突自动套用
rerere 在反复 rebase 同一分支时特别香——同一个冲突,解决一次就够了。
三、显示与体验
[color]
ui = auto
[core]
pager = delta # 更好的 diff 分页器(需安装 git-delta)
autocrlf = input # Windows 上用,提交时统一转 LF
excludesFile = ~/.gitignore_global
[diff]
algorithm = histogram # 比默认 myers 更适合代码
colorMoved = zebra # 标出代码块"搬家"
[log]
date = iso # 时间格式统一,方便脚本处理
diff.algorithm = histogram 特别值得开:重构挪代码时,diff 会明显更接近人眼理解。
四、几组好用的别名
[alias]
st = status -sb
co = checkout
sw = switch
br = branch -vv
lg = log --graph --oneline --decorate --all
last = log -1 HEAD --stat
unstage = reset HEAD --
amend = commit --amend --no-edit
undo = reset --soft HEAD~1
fixup = commit --fixup
pushf = push --force-with-lease
who = shortlog -sn --all
git lg 一眼看全仓库拓扑,git who 看谁提交最多,都是用了就回不去的。
五、进阶:条件包含
公司仓库和个人仓库用不同身份:
# ~/.gitconfig
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
name = 张三
email = zhangsan@company.com
signingkey = ABC123
六、别乱改的东西
- 不要为了消除警告随手
git config --global --unset掉验证相关配置 - 不要在 CI 环境里改机器级配置,用环境变量
GIT_AUTHOR_*、命令行-c更安全 core.autocrlf在 macOS / Linux 上保持默认,只有 Windows 需要关心
七、查看当前配置
git config --list --show-origin # 每一项来自哪个文件
git config --global --list # 只看全局