Throwing something at the mailing list to see if anybody is interested. Current '!' aliases move cwd to $GIT_WORK_TREE first, which could make handling path arguments hard because they are relative to the original cwd. We set GIT_PREFIX to work around it, but I still think it's more natural to keep cwd where it is. We have a way to do that now after 441981b (git: simplify environment save/restore logic - 2016-01-26). It's just a matter of choosing the right syntax. I'm going with '!!'. I'm not very happy with it. But I do like this type of alias. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- git.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/git.c b/git.c index 296857a..4c1dcf4 100644 --- a/git.c +++ b/git.c @@ -252,6 +252,10 @@ static int handle_alias(int *argcp, const char ***argv) alias_string++; commit_pager_choice(); + if (*alias_string == '!') { + keep_cwd = 0; + alias_string++; + } restore_env(keep_cwd); child.use_shell = 1; -- 2.8.2.524.g6ff3d78