Basic use ========= * Create a local repository from a public repository at `$URL`: $ git clone $URL * Stage a (possibly new) file (or files) for the next commit: $ git add $FILES * Remove a file (or files) with the next commit: $ git rm $FILES * Commit any local changes to the local repository: $ git commit -a -m "$MESSAGE" * Push any local commits to a public repository (e.g. `origin`): $ git push origin Merging ======= * Update your local view of a public repository (e.g. `origin`): $ git fetch origin * Merge new commits from another branch (e.g. the `origin/master` branch tracking the `master` branch of the `origin` repository): $ git merge origin/master * Mark conflicts as resolved: $ git add $FILES Comparing changes ================= * Compare the current working directory to the last commit: $ git diff HEAD Browsing history ================ * Check your local state: $ git status * View past commits: $ git log * Who wrote this line, and what were they thinking? $ git blame $FILES $ git show $COMMIT_HASH Recovering old versions ======================= * Undo local changes to `$FILES` since the last commit: $ git checkout $FILES * Checkout `$FILES` as they were during `$COMMIT`: $ git checkout $COMMIT -- $FILES * Create a new commit backing out changes made by an old commit: $ git revert $COMMIT Setting up a repository ======================= * Create a new repository in the current directory: $ git init Provenance ========== * Tag releases: $ git tag v1.2.3 $ git push --tags origin * Incorporate the tags into any releases. For example, the Git project extracts [version information][git-version-gen] when you [compile the project][git-makefile]. Most Python projects just increment `package.__version__` by hand (e.g. [pygit2][pygit2-version]). [git-version-gen]: http://git.kernel.org/cgit/git/git.git/tree/GIT-VERSION-GEN [git-makefile]: http://git.kernel.org/cgit/git/git.git/tree/Makefile [pygit2-version]: https://github.com/libgit2/pygit2/blob/master/pygit2/version.py