git co 和 git br 别名必须用 --global 配置,因其写入 ~/.gitconfig 对所有仓库生效;不加则仅存于当前仓库 .git/config,换项目需重配,且不可在 .zshrc 中定义 shell alias 混用。

git co 和 git br 别名为什么必须用 --global 配置
因为 Git 别名本质是写入配置文件的映射规则,不加 --global 只会存到当前仓库的 .git/config,换个项目就得重配。而 --global 写入 ~/.gitconfig,所有仓库自动生效。
常见错误是误在 ~/.zshrc 里写 alias gco='git checkout'——这属于 shell alias,Git 自己不认,且和 Oh My Zsh 的 gco(来自 git 插件)可能冲突。
- 正确写法:
git config --global alias.co checkout - 验证是否生效:
git config --get alias.co应输出checkout - 别名名不能和内置命令同名,比如
git config --global alias.branch branch会导致git branch失效
带参数的分支切换别名怎么写才不报错
想实现 git sw feature/login 切换分支,不能直接写 git config --global alias.sw 'checkout $1'——Git 不解析 $1,它只会原样执行 git checkout '$1',结果报错 fatal: not a valid object name: '$1'。
必须用 ! 开头声明为 shell 函数,并显式定义参数接收逻辑:
git config --global alias.sw '!f() { git checkout "$1"; }; f'- 注意结尾的
; f缺一不可,漏了就提示cannot run : No such file or directory - 双引号包裹
"$1"是为了支持含空格或斜杠的分支名,比如feature/login-v2
git br -a 显示不全?别名里要不要加默认参数
很多人配 git config --global alias.br branch 后发现 git br 只显示本地分支,想看远程得额外敲 -a。这不是 bug,而是别名只是字符串替换,git br -a 展开后是 git branch -a,完全合法。
但如果你高频使用 git branch -a,可以主动固化参数提升效率:
-
git config --global alias.bra 'branch -a'→git bra -
git config --global alias.brd 'branch -d'→git brd feature/test - 慎用
git config --global alias.br 'branch -a':覆盖原生br后,想只看本地分支反而要敲git branch全称
Oh My Zsh 的 git 插件别名和自定义别名冲突怎么办
Oh My Zsh 的 git 插件自带 gco、gb、gbd 等别名,它们是 shell alias,和 Git 自身的 alias.co 完全无关。两者共存时,优先级取决于你敲的是哪个命令。
例如你同时有:
- Shell alias:
alias gco='git checkout'(来自~/.zshrc) - Git alias:
co = checkout(来自~/.gitconfig)
那么 gco 走 shell 层,git co 走 Git 层——互不干扰。但若你删了插件又忘了 source ~/.zshrc,gco 就突然失效;而 git co 始终可用。
真正容易被忽略的点是:Windows 上 Git Bash 和 PowerShell 对 ! 函数解析不一致,git sw feature/x 在 PowerShell 里可能卡住或丢参数,建议这类函数型别名统一在 Git Bash 下配置。











