◆

Git 配置 alias 命令别名的方法

2023-02-02 01:370

git 的日常命令里有一批又长又要天天敲的,比如 git log --graph --oneline --decorate --all。git 内置了 alias 机制,可以把这些长命令映射成两三个字母的短名字。

它和 shell 的 alias 不是一回事:shell 别名写在 .zshrc 里、由 shell 展开,换个终端或者在脚本里就失效;git 别名存在 git 自己的配置文件中,只要是 git 命令就一定生效,还能跟着 ~/.gitconfig 一起同步到别的机器。

配置别名

使用 alias 配置 git 命令别名,如下

配置项的格式是 alias.<短名>,值是要替换成的命令,注意值里不要再写开头的 git。

git config --global alias.co checkout

当使用 git checkout 可简写成如下

git co
  • --global 代表在全局都生效,否则只在当前项目下生效
  • 配置的命令会在 .git/config 文件中

补充一句路径:加了 --global 时写入的是家目录下的 ~/.gitconfig;不加 --global 才是写进当前仓库的 .git/config,只在这个仓库里生效。两处同名时仓库级的优先。

要带参数的话把整条命令用引号包起来,否则空格后面的部分会被当成另一个参数:

git config --global alias.lg "log --graph --oneline --decorate --all"
git config --global alias.st "status -sb"
git config --global alias.last "log -1 HEAD"
git config --global alias.unstage "reset HEAD --"

unstage 这个值得单独说一下,git reset HEAD -- <file> 的作用是把文件从暂存区撤回工作区,改动本身不会丢,只是取消了 git add。它和会丢弃改动的 git reset --hard 完全不同,别记混。

别名也能调外部命令

在值前面加一个 !,git 就会把它当 shell 命令执行,这样能把多条操作串起来:

git config --global alias.ac '!git add -A && git commit -m'

之后 git ac "fix: 修复登录问题" 就等于先全量暂存再提交。注意 ! 形式的别名执行时工作目录是仓库根目录,不是我们当前所在的子目录,写涉及相对路径的命令时要留意这一点。

查看已配置的别名

配得多了容易忘,列出所有别名:

git config --global --get-regexp '^alias\.'

想看某个别名具体展开成什么,直接查这一项:

git config --global alias.lg

另外别名不会覆盖 git 的内置命令。比如我们配 alias.log 是无效的,git log 永远走内置实现,git 不给我们改掉原生命令的机会——这是有意设计的保护,避免脚本行为被配置意外改变。

删除命令

删除单个

git config --global --unset alias.co

删除所有

--remove-section 会把 ~/.gitconfig 里整个 [alias] 段连带下面所有条目一起删掉,且没有确认提示、执行后无法撤销。手上有一堆用了很久的别名时,动手前先把配置文件备份一份(cp ~/.gitconfig ~/.gitconfig.bak),或者把上面 --get-regexp 的输出留个记录,需要恢复时能照着重建。

git config --global --remove-section alias
💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEGit 配置 alias 命令别名的方法加载中