Shell commands as git aliases


To save typing, I has a couple of aliases set up in git. For example, to get the last hash, I simply type git hash. I did this by setting up the following alias:

$ git config --global alias.hash 'git log -1 --pretty=%h'

Now, I found out that basically anything can be aliased in this way. So one can create git commands with any shell command. The only thing is, if you use a non-git command, prefix it with !. This is how you’d do it in vim. Silly example, to demonstrate:

$ git config --global alias.foo '!echo foo'
$ git foo
foo

This is very useful if you need to pipe the output of a git command to a shell filter like sed, awk, grep… Here a more useful example:

$ git config --global alias.t '!git show-ref --abbrev=7 --tags | sed \"s|refs/tags/||\"'
$ git tag mytag 4d3h779
$ git t
4d3h779 mytag