作为开发人员,您可能每天都在使用Git CLI(命令行界面)。然而,反复编写相同的命令可能会很繁琐,特别是当命令很长时。这就是Git别名发挥作用的地方。
在本文中,您将了解如何通过使用别名简化Git命令。
目录
先决条件
-
了解Git。
-
已安装Git Bash(Windows用户可选但建议安装)。
-
像VS Code这样的IDE(这也是可选的)。
Git别名是什么?
Git别名是现有Git命令的自定义快捷方式,使常见任务更快更容易。它们让你定义自己的命令,让你可以按照自己的意愿定制快捷方式。
添加/创建Git别名的两种主要选项是,使用Git配置文件或直接通过CLI(终端/命令行)添加它们。
如何通过全局Git配置文件添加Git别名(推荐)
此选项涉及打开全局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
Windows: C:\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 cob
从main
分支创建一个新分支。
最终的命令可以接受参数(就像原始的 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函数。
解释:
-
!f()
:-
!
告诉Git将别名解释为shell命令,而不是标准的Git命令。 -
f()
定义了一个名为f
的shell函数,允许我们按顺序执行多个命令。
-
-
{ }
中的所有内容将在f()
函数内执行。 -
git checkout \"\$1”'\
:将运行一个带参数的 Git 命令,其中\$1
被转义,并将被替换为传递给别名的第一个参数。在\"
转义序列周围的\$1
允许分支名称中有空格。 -
&&
是一个逻辑运算符,确保每个命令仅在前一个成功运行时才运行。如果git checkout "$1"
失败,后续的命令将不会运行。 -
git checkout -b \"\$2”\
:使用第二个参数的名称创建一个新的分支。 -
;
:标记f()
函数的结束; -
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。
Source:
https://www.freecodecamp.org/news/how-to-simplify-your-git-commands-with-git-aliases/