Git is one of the, if the not the, most popular version control systems available. Originally created by Linus Torvalds to help manage the Linux source code, it's now used by millions of projects across all languages.
Trying to remember all those commands to perform common git tasks can be a bit of a nightmare, so we've created this Git cheat sheet of the most common commands so you can print it out as a quick reference to have at your desk.
# create new repository in current directory git init # clone a remote repository git clone [url] # for example cloning the entire jquery repo locally git clone https://github.com/jquery/jquery
Branches and Tags
# List all existing branches with the latest commit comment git branch –av # Switch your HEAD to branch git checkout [branch] # Create a new branch based on your current HEAD git branch [new-branch] # Create a new tracking branch based on a remote branch git checkout --track [remote/branch] # for example track the remote branch named feature-branch-foo git checkout --track origin/feature-branch-foo # Delete a local branch git branch -d [branch] # Tag the current commit git tag [tag-name]
# List all new or modified files - showing which are to staged to be commited and which are not git status # View changes between staged files and unstaged changes in files git diff # View changes between staged files and the latest committed version git diff --cached # only one file add the file name git diff --cached [file] # Add all current changes to the next commit git add [file] # Remove a file from the next commit git rm [file] # Add some changes in < file> to the next commit # Watch these video's for a demo of the power of git add -p - http://johnkary.net/blog/git-add-p-the-most-powerful-git-feature-youre-not-using-yet/ git add -p [file] # Commit all local changes in tracked files git commit –a git commit -am "An inline commit message" # Commit previously staged changes git commit git commit -m "An inline commit message" # Unstages the file, but preserve its contents git reset [file]
# Show all commits, starting from the latest git log # Show changes over time for a specific file git log -p [file] # Show who changed each line in a file, when it was changed and the commit id git blame -c [file]
Update and Publish
# List all remotes git remote -v # Add a new remote at [url] with the given local name git remote add [localname] [url] # Download all changes from a remote, but don‘t integrate into them locally git fetch [remote] # Download all remote changes and merge them locally git pull [remote] [branch] # Publish local changes to a remote git push [remote] [branch] # Delete a branch on the remote git branch -dr [remote/branch] # Publish your tags to a remote git push --tags
Merge & Rebase
# Merge [branch] into your current HEAD git merge [branch] # Rebase your current HEAD onto [branch] git rebase [branch] # Abort a rebase git rebase –abort # Continue a rebase after resolving conflicts git rebase –continue # Use your configured merge tool to solve conflicts git mergetool # Use your editor to manually solve conflicts and (after resolving) mark as resolved git add <resolved- file> git rm <resolved- file>
# Discard all local changes and start working on the current branch from the last commit git reset --hard HEAD # Discard local changes to a specific file git checkout HEAD [file] # Revert a commit by making a new commit which reverses the given [commit] git revert [commit] # Reset your current branch to a previous commit and discard all changes since then git reset --hard [commit] # Reset your current branch to a previous commit and preserve all changes as unstaged changes git reset [commit] # Reset your current branch to a previous commit and preserve staged local changes git reset --keep [commit]
Git UI Clients
Of course if you're not a command line fan there's plenty of Git UIs you can use:
Anything We Missed?
There's plenty more to Git than that just these commands. What commands or workflows did we miss out? Do you have any suggested tips or tricks too? Let us know in the comments below.