Add `git rollback` alias
Add `git rollback` alias

Normally I develop each new feature on a topic branch, even if it is a
single-commit thing. Sometimes, however, I like to be lazy and knock out
a series of unrelated, lightweight changes on the master branch.

The basic flow looks like:

  - make a commit
  - push to Gerrit
  - reset master back to HEAD~1
  - rinse, lather and repeat

As Gerrit is involved I do the reset because I don't want there to be an
apparent dependency when there isn't one.

This works fine when you have a clean worktree, but when you don't, `git
reset --hard` won't cut it, unless you cumbersomely use `git stash` as
well:

  git stash
  git reset --hard HEAD~1
  git stash pop

My initial cut at an alias for this was unnecessarily clever:

  rollback = !"REF=$(git symbolic-ref --short HEAD) && git checkout HEAD~1 && git branch -f $REF && git checkout $REF"

`git reset --merge HEAD~1` does exactly what I was looking for, and is
available in any non-ancient Git (ie. v1.6.2 or later). This commit adds
a `rollback` alias for that, which in my mental model is similar to
Rails' `rake db:rollback` task:

  rollback = !sh -c 'git reset --merge HEAD~${1-1}' -

This can be used as follows:

  git rollback # equivalent to: git reset --merge HEAD~1
  git rollback 2 # equivalent to: git reset --merge HEAD~2

Signed-off-by: Wincent Colaiuta <c76ac2e9cd86441713c7dfae92c451f3e6d17fdc@wincent.com>

wincent/wincent,wincent/wincent,wincent/wincent,wincent/wincent,wincent/wincent,wincent/wincent,wincent/wincent,wincent/wincent