带有位置参数的Git别名

带有位置参数的Git别名

基本上我只是想化名:

git files 9fa3

.执行命令:

git diff --name-status 9fa3^ 9fa3

但是git似乎没有将位置参数传递给别名命令。我试过:

[alias]
    files = "!git diff --name-status $1^ $1"
    files = "!git diff --name-status {1}^ {1}"

.还有其他几个,但这些都不起作用.

退化的情况是:

$ git echo_reverse_these_params a b c d e
e d c b a

.我该怎么做呢?


慕桂英546537
浏览 429回答 3
3回答

慕森王

最明显的方法是使用shell函数:[alias]     files = "!f() { git diff --name-status \"$1^\" \"$1\"; }; f"没有的别名!被视为Git命令;commit-all = commit -a.带着!,它在shell中作为自己的命令运行,允许您像这样使用更强大的魔法。UPD因为命令在存储库的根处执行,所以可以使用${GIT_PREFIX}变量时,当引用命令中的文件名时。

元芳怎么了

你也可以参考sh直接(而不是创建函数):[alias]         files = !sh -c 'git diff --name-status $1^ $1' -(请注意行尾的破折号-你会需要的。)

温温酱

您要寻找的别名是:files = "!git diff --name-status \"$1\"^ \"$1\" #"通过论证验证:files = "!cd -- \"${GIT_PREFIX:-.}\" && [ x$# != x1 ] && echo commit-ish required >&2 || git diff --name-status \"$1\"^ \"$1\" #"这个最终#很重要-它阻止所有用户提供的参数被shell处理(它将它们注释掉)。注:git将所有用户提供的参数放在命令行的末尾。若要查看此操作,请尝试:GIT_TRACE=2 git files a b c d逃逸者(由于筑巢)引号对于包含空格或"; rm -rf --no-preserve-root /;)
打开App,查看更多内容
随时随地看视频慕课网APP