Define git alias with the same name to shadow original command
I'm trying to use to use the same name for an alias as the existing command, so that the alias shadows the original command (preventing me from deleting files off the working tree).
[alias]
rm = rm --cached
diff = diff --color
Unfortunatly this is not working. Does anyone know a workaround? Thanks.
Edit
Setting color.diff = true
gives colored output as default.
For commands like rm --cached
that don't have configurable options, your best bet is to just make an alias named differently. For example:
[alias]
rmc = rm --cached
You may have already figured this out, but Git aliases cannot shadow existing Git commands. From the git-config
man page:
To avoid confusion and troubles with script usage, aliases that hide existing git commands are ignored.
As a workaround, you can define aliases in Bash to get the result you want. Here's something I just knocked up for a pet peeve of mine - that 'git add' is not verbose by default. (And there's no config setting for it).
Put this in your ~/.bash_profile
or ~/.bash_rc
function do_git {
cmd=$1
shift
extra=""
if [ "$cmd" == "add" ]; then
extra="-v"
elif [ "$cmd" == "rm" ]; then
extra="--cached"
fi
git="$(which git)"
ex="$git $cmd $extra $@"
${ex}
}
alias git='do_git'
Then just call it like normal:
$ git add .
add 'foo'