Git is the source code management system used for the Linux kernel and many other highly complex projects. It was written by Linux Torvalds after some controversy over the proprietary Bitkeeper program that used to manage the Linux kernel.
I've needed to upgrade my skills recently to use git in place of subversion because that is what my shop decided to use. I've moved all my Rails code into a remote git server and so far, so good. In one project, I was asked to track large video files with git and ran into a problem. When pushing files to a remote repository, git tries to compress all files in memory before sending. I got out of memory errors and had to commit a few files at a time.
One improvement is it has fewer "droppings" than subversion. There is no hidden .svn directory in each directory with source code. Only a single .git directory at the root of the project, plus a .gitignore file for files you don't want git to track.
Initialize project tracking
Check out an existing project from remote server
git clone ssh://server/git/project
Add a file for git to track
Add all files from this directory and below for git to track
git add .
Commit all files to local repository
git commit -a -m "message"
Undo changes to a file (re-check out from repository)
git checkout --
Pull files from remote repository and merge with local repository
Push files to remote repository (must commit first)
Move file or directory to new location
git mv path destination
Remove file or directory from the working tree (stops tracking, but doesn't delete)
git rm --cached /path/to/file
Remove file or directory from the working tree (deletes the file)
git rm /path/to/file
To create a remote repository from an existing project takes several steps
git clone --bare /path/to/project (creates a /tmp/project.git directory)
scp project.git to remote server
git remote add origin ssh://server/git/project
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
Create a new branch
git checkout -b mybranch
After committing all changes to the new branch, you eventually need to merge those back into the master repository (usually origin/master) with the following four steps.
Switch back to the origin
git checkout origin
Merge in the new branch as one commit (no fast forward)
git merge --no-ff mybranch
Delete the branch
git branch -d mybranch
Push to master repository
git push origin
This is a good article on branch and release management.
Another simple guide on the basics.