Basically I'm trying to alias:
git files 9fa3
...to execute the command:
git diff --name-status 9fa3^ 9fa3
but git doesn't appear to pass positional parameters to the alias command. I have tried:
[alias]
files = "!git diff --name-status $1^ $1"
files = "!git diff --name-status {1}^ {1}"
...and a few others but those didn't work.
The degenerate case would be:
$ git echo_reverse_these_params a b c d e
e d c b a
...how can I make this work?
The most obvious way is to use a shell function:
[alias]
files = "!f() { git diff --name-status \"$1^\" \"$1\"; }; f"
An alias without !
is treated as a Git command; e.g. commit-all = commit -a
.
With the !
, it's run as its own command in the shell, letting you use stronger magic like this.
UPD
Because commands are executed at the root of repository you may use ${GIT_PREFIX}
variable when referring to the file names in commands