优秀的文章《7 个改变我人生的 Git 技巧》启发我写了另一篇关于 Git 功能的文章,这个功能对我在命令行中使用 Git 的体验产生了重大影响:别名。
定义 Git 别名作为命令的替代品提供了两个主要好处
- 它简化了具有许多选项的长命令,使它们更短且更易于记忆。
- 它缩短了常用命令,以便您可以更高效地工作。
如何定义和使用别名
要定义 Git 别名,请使用带有别名和要替换的命令的 git config
命令。例如,要为 git push
创建别名 p
$ git config --global alias.p 'push'
您可以通过将别名作为参数提供给 git
来使用别名,就像任何其他命令一样
$ git p
要查看所有别名,请使用 git config
列出您的配置
$ git config --global -l
user.name=ricardo
user.email=ricardo@example.com
alias.p=push
您还可以使用您喜欢的 shell(例如 Bash 或 Zsh)定义别名。但是,使用 Git 定义别名提供了使用 shell 所不具备的几个功能。首先,它允许您在不同的 shell 中使用别名,而无需额外的配置。它还与 Git 的自动纠错功能集成,因此当您输错命令时,Git 可以建议别名作为替代方案。最后,Git 将您的别名保存在用户配置文件中,允许您通过复制单个文件将它们传输到其他机器。
无论您使用哪种方法,定义别名都可以改善您使用 Git 的整体体验。有关定义 Git 别名的更多信息,请查看 Git Book。
8 个有用的 Git 别名
现在您已经知道如何创建和使用别名,请查看一些有用的别名。
1. Git 状态
Git 命令行用户经常使用 status
命令来查看已更改或未跟踪的文件。默认情况下,此命令提供带有许多行的详细输出,这可能不是您想要或需要的。您可以使用单个别名来解决这两个问题:定义别名 st
以缩短带有选项 -sb
的命令,以输出包含分支信息的较少详细的状态
$ git config --global alias.st 'status -sb'
如果您在干净的分支上使用此别名,则您的输出如下所示
$ git st
## master
在具有已更改和未跟踪文件的分支上使用它会产生以下输出
$ git st
## master
M test2
?? test3
2. Git log --oneline
创建一个别名以将您的提交显示为单行,以获得更紧凑的输出
$ git config --global alias.ll 'log --oneline'
使用此别名可提供所有提交的简短列表
$ git ll
33559c5 (HEAD -> master) Another commit
17646c1 test1
3. Git 最近一次提交
这显示了有关您最近一次提交的详细信息。这扩展了 Git Book 中关于 别名 的章节中的一个示例
$ git config --global alias.last 'log -1 HEAD --stat'
使用它来查看最近一次提交
$ git last
commit f3dddcbaabb928f84f45131ea5be88dcf0692783 (HEAD -> branch1)
Author: ricardo <ricardo@example.com>
Date: Tue Nov 3 00:19:52 2020 +0000
Commit to branch1
test2 | 1 +
test3 | 0
2 files changed, 1 insertion(+)
4. Git 提交
当您对 Git 存储库进行更改时,您会经常使用 git commit
。使用 cm
别名使 git commit -m
命令更高效
$ git config --global alias.cm 'commit -m'
由于 Git 别名会扩展命令,因此您可以在执行期间提供其他参数
$ git cm "A nice commit message"
[branch1 0baa729] A nice commit message
1 file changed, 2 insertions(+)
5. Git 远程仓库
git remote -v
命令列出所有配置的远程存储库。使用别名 rv
缩短它
$ git config --global alias.rv 'remote -v'
6. Git diff
git diff
命令显示不同提交或提交与工作树之间文件之间的差异。使用别名 d
简化它
$ git config --global alias.d 'diff'
标准的 git diff
命令对于小的更改效果很好。但对于更复杂的更改,诸如 vimdiff
之类的外部工具使其更有用。创建别名 dv
以使用 vimdiff
显示差异,并使用 -y
参数跳过确认提示
$ git config --global alias.dv 'difftool -t vimdiff -y'
使用此别名显示两个提交之间 file1
的差异
$ git dv 33559c5 ca1494d file1

(Ricardo Gerardi,CC BY-SA 4.0)
7. Git config list
gl
别名使列出所有用户配置更容易
$ git config --global alias.gl 'config --global -l'
现在您可以查看所有定义的别名(和其他配置选项)
$ git gl
user.name=ricardo
user.email=ricardo@example.com
alias.p=push
alias.st=status -sb
alias.ll=log --oneline
alias.last=log -1 HEAD --stat
alias.cm=commit -m
alias.rv=remote -v
alias.d=diff
alias.dv=difftool -t vimdiff -y
alias.gl=config --global -l
alias.se=!git rev-list --all | xargs git grep -F
8. Git 搜索提交
Git 别名允许您定义更复杂的别名,例如通过以 !
字符作为前缀来执行外部 shell 命令。您可以使用它来执行自定义脚本或更复杂的命令,包括 shell 管道。
例如,定义别名 se
以在您的提交中搜索
$ git config --global alias.se '!git rev-list --all | xargs git grep -F'
使用此别名在您的提交中搜索特定字符串
$ git se test2
0baa729c1d683201d0500b0e2f9c408df8f9a366:file1:test2
ca1494dd06633f08519ec43b57e25c30b1c78b32:file1:test2
自动纠正您的别名
使用 Git 别名的一个很酷的好处是它与自动纠错功能的原生集成。如果您犯了错误,默认情况下,Git 会建议与您键入的内容相似的命令,包括别名。例如,如果您键入 ts
而不是 st
表示 status
,Git 将建议正确的别名
$ git ts
git: 'ts' is not a git command. See 'git --help'.
The most similar command is
st
如果您启用了自动纠错,Git 将自动执行正确的命令
$ git config --global help.autocorrect 20
$ git ts
WARNING: You called a Git command named 'ts', which does not exist.
Continuing in 2.0 seconds, assuming that you meant 'st'.
## branch1
?? test4
优化 Git 命令
Git 别名是一个有用的功能,它通过优化常用和重复命令的执行来提高您的效率。Git 允许您定义任意数量的别名,一些用户定义了很多。我更喜欢只为我最常用的命令定义别名——定义太多会使它们更难记住,并且可能需要我查找它们才能使用它们。
有关别名的更多信息,包括其他有用的别名,请参阅 Git Wiki 的别名页面。
评论已关闭。