我怎样才能设置一个别名为“git last”接受一个数字作为参数?

在Pro Git中,Scott Chacon给出了一些可能有用的别名的一些很好的例子,其中包括显示最后一次提交的一个别名 : git last ,相当于log -1 HEAD

 git config --global alias.last 'log -1 HEAD' 

它会显示这样的事情:

 $ git last commit 66938dae3329c7aebe598c2246a8e6af90d04646 Author: Josh Goebel <dreamer3@example.com> Date: Tue Aug 26 19:48:51 2008 +0800 test for current head 

我在堆栈溢出上读了一些类似的问题,比如将一个parameter passing给一个Git别名命令,但是还没有弄清楚。

我能想到的最好的办法是修改我的.gitconfig文件,如下所示:

 [alias] last = log -1 HEAD mylast = "!sh -c 'echo /usr/local/bin/git last -$0 HEAD'" 

那么如果我在命令行运行这个:

 $ git mylast 12 

我得到这个:

 /usr/local/bin/git last -12 HEAD 

这实际上看起来不错。 但是,如果我删除前面的echo ,它就像等待input一样挂起。 我尝试将$0转换为$1但这似乎也没有帮助。

我究竟做错了什么?

另外,有没有办法设置它,所以如果我只是inputgit last没有数字,那么它会默认为“1”?

 last = !sh -c 'git log "-${1:-1}" HEAD' - 

这利用了shell参数插值的默认语法${var:-default} ,如果变量var没有被设置,它将替代default语法。