Git commands

@devoncarew Please take an initial look. 

Sorry about a huge CL. The commits in the CL are independent. Please review it commit by commit.

If it sound better, I can do different pull request for each commit.

Thanks