I hear Tower is pretty good.
You can use github's compare capability to compare between commits, tags or even branches. As seen on GitHub
Compare View URLs
We wanted Compare View to be something we could link to from external sites and services anytime we were referring to a range of commits in a git repository. As such, we thought it would be worthwhile to document the basic structure of a Compare View URL:
http://github.com/<USER>/<REPO>/compare/[<START>...]<END>
Where <USER> and <REPO> are obvious, and <START> and <END> are branch names, tag names, or commit SHA1s specifying the range of history to compare. If <START> is omitted, the repository's default branch is assumed
As for a more effective branching methodology, I'd recommend using this. Worked in a couple of startups I've been with --> http://nvie.com/posts/a-successful-git-branching-model/