高级别名

如果你用 ! 作为前缀,Git 允许你在别名中使用非 git 命令和完整的 sh shell 语法。

在你的~/.gitconfig 文件中:

[alias]
    temp = !git add -A && git commit -m "Temp"

这些前缀别名中提供完整 shell 语法的事实也意味着你可以使用 shell 函数来构造更复杂的别名,例如利用命令行参数的别名:

[alias]
    ignore = "!f() { echo $1 >> .gitignore; }; f"

上面的别名定义了 f 函数,然后使用传递给别名的任何参数运行它。所以运行 git ignore .tmp/会将 .tmp/添加到你的 .gitignore 文件中。

实际上,这个模式非常有用,Git 为你定义了 $1$2 等变量,所以你甚至不需要为它定义一个特殊的函数。 (但请记住,即使你通过这些变量访问它,Git 也会附加参数,所以你可能想在最后添加一个伪命令。)

请注意,以这种方式前缀为 ! 的别名是从 git checkout 的根目录运行的,即使当前目录在树中更深。这可以是从根运行命令而不必明确地使用 cd 的有用方法。

[alias]
    ignore = "! echo $1 >> .gitignore"