On watching TJ’s screencast, I was super impressed by his various swift git operations using shell aliases. Therefore, I adopted many of them with some customization. After that, I felt my git skill has improved significantly. The real reason was hidden until recently…

Originally, I thought, with those aliases, the friction to use various git operations is lowered (because I can type less for the same purposes now), so I will probably be using git more often. Therefore, I would become more proficient in using it. There’s nothing wrong in that reasoning, but that’s merely a minor point in comparing with the real reason.

The reason why I become more proficient in git is that those shell aliases provide me an opportunity to design a new interface reflecting the mental model as I understand the high level SCM concepts instead of following the original various git operations exposing the low level implementation details of git.

Some of representative examples in my aliases:

g = git status # since it's probably my mostly used operation
go = git checkout # go to a particular commit/branch is more sensible
gsave = git stash # saving my messy workspace
grestore = git stash pop # restoring what I just saved