gitcmds: handle getting a diff for the root commit

`git diff $sha1~ $sha1` is not allowed by `git diff` because $sha1~ does
not exist for the root commit.  `git diff` is more robust when we use
the `^!` syntax, so use that when getting the diff for a commit.

This also handles merges nicely.

Closes #200

Signed-off-by: David Aguilar <davvid@gmail.com>
Reported-by: Stanisław Halik <sthalik@misaki.pl>
commitmsg: make "Commit" the default when nothing is staged

This lessens the need for the proposed "sync" mode to do any
staging of content since users can easily do "Ctrl+Enter" to
commit followed by an additional "Enter" to accept the new
default when prompted for whether they want to stage + commit.

Signed-off-by: David Aguilar <davvid@gmail.com>