Tag

  git tag -a x.y.z -m "Tag version x.y.z"

Squash multiple commits into one

  git rebase -i HEAD~<N>

  http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

Change commit message

  git commit --amend

Revert uncommited changes

  git reset --hard HEAD

Setup remote repository

  On remote:

  1. mkdir proj.git
  2. chgrp scm proj.git  
  2. cd proj.git
  3. git --bare init --shared=all
  4. chgrp -R scm ../proj.git
  5. edit description
  6. cd hooks
  7. mv post-update.sample post-update

  On local:

  1. git remote add origin scm.codesynthesis.com:/var/scm/proj/proj.git
  2. git push --tags origin master
  3. # blow the local project and do clone

Delete a branch from a remote repository

  git push origin :experimental

  Find a ref that matches experimental in the origin repository (e.g.
  refs/heads/experimental), and delete it.

Rebasing

  Local (e.g., from a feature branch to master):
 
  git rebase <src> [<dst>]
  
  If <dst> is not specified, current branch is used. If <dst> is
  specified, it is checked out.

  Remote (e.g., merge someone else's changes):

  git fetch
  git rebase origin[/master]
  git push --tags origin