Git Cheat Sheet

This is based off the Git Cheat Sheet GitHub hands out at conferences. I've used it many times to remind me about the commands I commonly forget so I figured I'd post it here as well.

Configure Tooling

Configure user information for all local repositories.

Sets the name you want attached to your commit transactions
$ git config --global user.name "[name]"
Sets the email you want attached to your commit transactions
$ git config --global user.email "[email address]"
Enables helpful colorization of command line output
Enables colorization of command line output

Create Repositories

Start a new repository or obtain one from an existing URL

Create a new local repository with the secified name
$ git init [project-name]
Download a project and its entire version history
$ git clone [project-name]

Make Changes

Review edits and craft a commit transaction

Lists all new or modified files to be committed
$ git status
Shows file differences not yet staged
$ git add [file]
Show file differences between staging and the last file version
$ git diff --staged
Unstages the file, but preserve it's contents
$ git reset [file]
Records file snapshots permanently in version history
$ git commit -m "[descriptive message]"

Group Changes

Name a series of commits and combine completed efforts

Lists all local branches in the current repository
$ git branch
Creates a new branch
$ git branch [branch-name]
Switches to the specified brnach and updates the working directory
$ git checkout [branch-name]
Combines the specified branch's history into the current branch
$ git merge [branch]
Deletes the specified branch
$ git branch -d [branch-name]

Refactor Filenames

Relocate and remove versioned files

Deletes the file from the working directory and stages the deletion
$ git rm [file]
Removes the file from version control but preserves the file locally
$ git rm --cached [file]
Changes the file name and prepares it for commit
$ git mv [file-original] [file-renamed]

Suppress Tracking

Exclude temporary files and paths

A text file named .gitignore suppresses accidental versioning of files and paths matching the specified patterns
*.log
build/
temp-*
Lists all ignored files in this project
$ git ls-files --other --ignored --ecluded-standard 

Save Fragments

Shelve and restore incomplete changes

Temporarily stores all modified tracked files
$ git stash
Restores the most recently stashed files
$ git stash pop
Lists all stashed changesets
$ git stash list
Discards the most recently stashed content
$ git stash drop

Review History

Browse and inspect the evolution of project files

List version history for the current branch
$ git log
List version history for a file, including renames
$ git log --follow [file]
Shoes content differences between two branches
$ git diff [first-branch] [second-branch]
Ouputs metadata and content changes of the specified commit
$ git show [commit]

Redo Comments

Erase mistakes and craft replacement history

Undoes all commits after [commit], preserving changes locally
$ git reset [commit]
Discards all history and changes back to the specified commit
$ git reset --hard [commit]

Synchronize Changes

Register a repository bookmark and exchange version history

Downloads all history from the repository bookmark
$ git fetch [bookmark]
Combines bookmark's branch into currrent local branch
$ git merge [bookmark]/[branch]
Uploads all local branch commits to repo
$ git push [alias] [branch]
Downloads bookmark history and incorporates chnages
$ git pull