[[r_git_aliases]]
=== Git 别名

(((aliases)))
在我们结束本章 Git 基础之前，正好有一个小技巧可以使你的 Git 体验更简单、容易、熟悉：别名。
我们不会在之后的章节中引用到或假定你使用过它们，但是你大概应该知道如何使用它们。

Git 并不会在你输入部分命令时自动推断出你想要的命令。
如果不想每次都输入完整的 Git 命令，可以通过 `git config` 文件来轻松地为每一个命令设置一个别名。(((git commands, config)))
这里有一些例子你可以试试：

[source,console]
----
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
----

这意味着，当要输入 `git commit` 时，只需要输入 `git ci`。
随着你继续不断地使用 Git，可能也会经常使用其他命令，所以创建别名时不要犹豫。

在创建你认为应该存在的命令时这个技术会很有用。
例如，为了解决取消暂存文件的易用性问题，可以向 Git 中添加你自己的取消暂存别名：

[source,console]
----
$ git config --global alias.unstage 'reset HEAD --'
----

这会使下面的两个命令等价：

[source,console]
----
$ git unstage fileA
$ git reset HEAD -- fileA
----

这样看起来更清楚一些。
通常也会添加一个 `last` 命令，像这样：

[source,console]
----
$ git config --global alias.last 'log -1 HEAD'
----

这样，可以轻松地看到最后一次提交：

[source,console]
----
$ git last
commit 66938dae3329c7aebe598c2246a8e6af90d04646
Author: Josh Goebel <dreamer3@example.com>
Date:   Tue Aug 26 19:48:51 2008 +0800

    test for current head

    Signed-off-by: Scott Chacon <schacon@example.com>
----

可以看出，Git 只是简单地将别名替换为对应的命令。
然而，你可能想要执行外部命令，而不是一个 Git 子命令。
如果是那样的话，可以在命令前面加入 `!` 符号。
如果你自己要写一些与 Git 仓库协作的工具的话，那会很有用。
我们现在演示将 `git visual` 定义为 `gitk` 的别名：

[source,console]
----
$ git config --global alias.visual '!gitk'
----
