> never write a commit message without the diff in hand To do this in git, use the --verbose flag with git commit. I use it in my configuration by default, and it really helps.
How do you set this by default? I looked through git-config, and elsewhere, but I couldn't find any way to do it, short of using a shell wrapper.
In your ~/.gitconfig:
[alias]
ci = commit -v
Then always commit with: git ci