作为开发人员,您可能每天都在使用Git CLI(命令行界面)。然而,反复编写相同的命令可能会很繁琐,特别是当命令很长时。这就是Git别名发挥作用的地方。

在本文中,您将了解如何通过使用别名简化Git命令。

目录

先决条件

  • 了解Git。

  • 已安装Git Bash(Windows用户可选但建议安装)。

  • 像VS Code这样的IDE(这也是可选的)。

Git别名是什么?

Git别名是现有Git命令的自定义快捷方式,使常见任务更快更容易。它们让你定义自己的命令,让你可以按照自己的意愿定制快捷方式。

添加/创建Git别名的两种主要选项是,使用Git配置文件或直接通过CLI(终端/命令行)添加它们。

此选项涉及打开全局git配置文件,并将您的git别名追加到文件底部。

如何设置您首选的Git编辑器

设置您的默认Git配置编辑软件,例如,我使用VS Code来编辑我的Git配置文件,但您可以使用您喜欢的任何文本编辑器/代码编辑器。

运行以下命令将Notepad设置为Windows上的首选编辑器(CMD/PowerShell):

git config --global core.editor "notepad"

运行以下命令将VS Code设置为Windows和MacOS/Linux上的首选编辑器:

git config --global core.editor "code --wait"

要设置不同的默认编辑器,请在网上搜索“将{editor}设置为默认Git编辑器”,并将{editor}替换为您喜欢的应用程序。

如何打开Git配置文件

打开您选择的终端并输入以下命令。这将以编辑模式打开全局Git配置文件(git config —global)。

git config --global -e

您可以直接从以下位置打开git配置文件:

Mac Os:主目录→显示隐藏文件(Cmd + Shift + H)→.gitconfig

WindowsC:\Users\YourUsername\→然后显示隐藏文件(在查看中)→并找到.gitconfig

Linux: 主目录→显示隐藏文件(Ctrl + H)→.gitconfig

如何通过您的配置文件添加Git别名

如果您是第一次添加Git别名,打开您的.gitconfig文件,在末尾添加[alias],然后在下面列出您的快捷方式。这告诉Git这些是别名。添加您喜欢的别名(您希望运行的缩写命令)。

git别名的格式是<alias> = <command>,所以我们有:

co = checkout
cob = checkout -b

以上示例的解释:

co = checkout 这将git checkout命令映射为更短的git co命令。然后你可以在终端中调用git co feature/123

你无需在命令前输入git,因为配置会自动添加这个,因为它知道你要映射的命令是一个Git命令。

注意: 传递给命令的任何参数仅会应用于别名中调用的最终命令。

可以通过这种方式添加更多别名,将快捷方式映射到现有的git命令。保存并关闭文件后,别名将在终端中可用。

如何在CLI中添加别名

如果你想更简便地添加Git别名,你可以直接在终端/命令行中添加。

以上述示例为例,我们可以直接这样添加:

命令的格式为:git config --global alias.{别名} "{原始命令}":

git config --global alias.co "checkout"
#或者
git config --global alias.cob "checkout -b"

就是这么简单!

如何为更复杂的快捷方式创建自定义命令

好的,这看起来很棒,但并不是很令人印象深刻 – 我们只是去掉了一些字符。然而,我们可以使它们更加有用,我们可以使用Shell命令来创建我们的命令。

让我们来看一个我经常使用的命令示例!

new-work = !git checkout main && git pull && git cob

这个别名将多个 Git 命令组合成一个 shell 命令。 ! 字符告诉 Git 将其视为一个 shell 命令,而不是标准的 Git 命令。

没有 !,Git 会将该别名视为 Git 命令(例如,checkout 变成 git checkout)。有了 !,Git 知道要作为 shell 命令运行,而不用在前面添加 git

通过链接这些命令,我们可以编写更加有用的别名。上面的别名将:

  • 首先,检出 main 分支。

  • 使用 && 运算符,这意味着其他命令只有在前一个命令成功运行后才会执行。

  • 其次,从 main 拉取变更。

  • 最后,使用我们的其他别名 git cobmain 分支创建一个新分支。

最终的命令可以接受参数(就像原始的 Git 命令),因此可以这样使用:

git new-work 'feature/new-work-from-main'

如何在所有命令中使用参数

到目前为止,我们只能将参数传递给我们别名中的最终git命令。然而,如果我们想要将参数传递给别名中的一些或所有命令,我们可以通过使用shell函数来实现。

以下是一个示例:

new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"

在上面的示例中,我们使用了一个处理输入参数的shell函数。

解释:

  1. !f()

    • !告诉Git将别名解释为shell命令,而不是标准的Git命令。

    • f()定义了一个名为f的shell函数,允许我们按顺序执行多个命令。

  2. { }中的所有内容将在f()函数内执行。

  3. git checkout \"\$1”'\:将运行一个带参数的 Git 命令,其中 \$1 被转义,并将被替换为传递给别名的第一个参数。在 \" 转义序列周围的 \$1 允许分支名称中有空格。

  4. && 是一个逻辑运算符,确保每个命令仅在前一个成功运行时才运行。如果 git checkout "$1" 失败,后续的命令将不会运行。

  5. git checkout -b \"\$2”\:使用第二个参数的名称创建一个新的分支。

  6. ;:标记 f() 函数的结束;

  7. f:最后的 f 立即调用别名函数,这意味着当您调用别名时,它会声明函数然后立即调用它。

用法:

git new-work development task/feat-123

其他有用的别名

[alias]
     co = checkout
    cob = checkout -b
    s = status
    tidy-up = !git checkout main && git branch | grep -v "main" | xargs git branch -D
    latest = !git checkout main && git pull
    new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"
    done = !git push -u origin HEAD
    save = !git add -A && git commit
    saveM = !git add -A && git commit -m
    br = branch --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate

概要

co: 切换到指定分支 → git co task/feat-123

cob: 从当前分支创建新分支 → git cob feature/123

s: 调用git status查看当前Git分支的状态 → git s

tidy-up: 删除除main以外的所有本地分支 → git tidy-up

latest: 从远程main分支获取最新更改 → git latest

new-work: 从第一个参数分支创建一个新分支(第二个参数) → git new-work main feat/123

git done: 推送当前分支到远程仓库(origin)并将其设置为上游分支。当推送第一个提交时出现错误时,这可能会有所帮助:
fatal: The current branch has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin

save: 将所有更改的文件添加并提交,打开您的默认Git编辑器并请求提交消息 → git save

savem:执行与上述相同的操作,但是不会打开编辑器,你可以内联传入提交信息 → git savem ‘Task123: add index.html

br: 这个看起来很复杂,但其实并不像看起来那么复杂,但它展示了别名的威力。实质上,它定制了git branch命令的输出格式,以展示按照最近提交日期排序的详细且带有颜色编码的分支列表,对于每个你在本地拥有的分支,它会看起来类似下面的图片。

就是这样,介绍了Git别名以及一些你可以作为配置入门的有用别名示例。

如果你想讨论一下,或者想了解未来的文章,可以关注我的Twitter