How can I create an alias for a git [action] command (which includes spaces)?

Not a direct answer to your question (since aliases can only be one word), but you should be using git-config instead:

git config --global alias.civ commit -v

This creates a git alias so that git civ runs git commit -v. Unfortunately, AFAIK there is no way to override existing git commands with aliases. However, you can always pick a suitable alias name to live with as an alternative.


You're talking about a command that includes a space, but here the command is git and there's no space in there.

To call a git commit command, you'd need to write it

git\ commit ...
'git commit' ...
"git commit" ...

Generally commands don't have space in their names for that reason that it is cumbersome to call them in a shell, so I don't think you'll find such a command on your system.

csh, tcsh or zsh will allow you to alias any of those above, but not bash or ksh (though pdksh will allow you but you won't let you use them). In zsh:

alias "'git commit'=git commit -v"
'git commit' ...

Will make the git command command (when called as 'git command' (with the single quotes) only) an alias for the git command with the commit and -v arguments. Not what you were looking for I'd guess though.

Because alias can only alias commands, all you can alias here is the git command, and you'd need to alias it to something that inserts a "-v" after "commit" in its list of arguments. Best would be to go with @jw013's solution but if for some reason you can't or wouldn't, instead of using an alias, you could use a function to do the job:

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}

In Bash you cannot create an alias for for a command with any whitespace in it.
However, I use the following function in my .bashrc as a workaround.

sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }

How this works is: You start with the command you wish to call. In my case it is sudo.
Then, you mention what parameters would it take. In this case, pacman -Syu.
If, triggered, what command should it execute? In the above statement it is pacup.sh.
Else, what command is to be executed, sudo $@. $@ is, as you will have guessed by the, the parameter list the command takes.

So, making the command for your particular case, it would be:

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }

However, this solution is for the more general case of when you want to alias commands with whitespaces in them.
In your specific case, I would recommend you go with jw013's solution to alias your git commands using git-config