跳到主要内容

值得写进 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 # 只看全局