Git Cheat Sheet - A Detailed Reference
Git is a widely adopted version control system that allows developers to track code changes and collaborate. It's a staple in the software industry, assisting both individuals and teams in managing code revisions efficiently.
In the sections below, we've provided a concise rundown of varied Git commands and practices, catering to a range of expertise levels. From solo projects to collaborative team efforts, this reference is designed to speed up your workflow with Git's robust version control capabilities.
Basic Commands
Command | Description |
---|---|
git init | Initialize a new Git repository |
git clone <repo> | Clone an existing repository |
git add <file> | Add a file to the staging area |
git commit -m "<message>" | Commit changes with a message |
git status | View the current status of the repository |
git log | View the commit history |
git diff | View differences between committed versions |
Branching and Merging
Command | Description |
---|---|
git branch <name> | Create a new branch |
git checkout <branch> | Switch to a different branch |
git merge <branch> | Merge a branch into the current branch |
git branch -D <branch> | Delete a branch |
git branch -m <newname> | Rename a branch |
git branch -a | List all local and remote branches |
git checkout -b <branch> | Create and switch to a new branch |
Remote Repositories
Command | Description |
---|---|
git pull | Pull changes from a remote repository |
git push | Push local commits to a remote repository |
git fetch | Fetch changes from a remote repository without merging them |
git push <remote> --delete <branch> | Delete a remote branch |
git push <remote> <branch> | Push a local branch to a remote repository |
git push <remote> --tags | Push all tags to a remote repository |
git remote -v | List all remote repositories |
git remote add <name> <url> | Add a remote repository |
git remote rename <oldname> <newname> | Rename a remote repository |
git remote remove <name> | Remove a remote repository |
git remote set-url <name> <newurl> | Set the URL for a remote repository |
Stashing and Cleaning
Command | Description |
---|---|
git stash | Stash changes to temporarily shelve them |
git stash list | View a list of stashes |
git stash apply | Apply the latest stash |
git stash pop | Apply the latest stash and remove it from the stash list |
git stash drop | Remove the latest stash from the stash list |
git stash clear | Remove all stashes from the stash list |
git clean -f | Remove untracked files from the repository |
Tagging and Submodules
Command | Description |
---|---|
git tag <tagname> | Create a tag to mark a specific commit |
git tag -d <tagname> | Delete a tag |
git tag -v <tagname> | Verify a tag's GPG signature |
git submodule <repo> | Add a submodule to the repository |
git submodule init | Initialize submodules in the repository |
git submodule update | Update submodules to the latest commit |
git submodule sync | Synchronize submodule URLs with the parent repository |
git submodule status | View the status of submodules in the repository |
git submodule deinit <repo> | Remove a submodule from the repository |
git submodule foreach <command> | Run a command in each submodule |
git submodule summary | View a summary of changes in submodules |
Configuration
Command | Description |
---|---|
git config --global user.name "<name>" | Set the user's name for Git commits |
git config --global user.email "<email>" | Set the user's email for Git commits |
git config --global --list | View the user's Git configuration |
git config --global color.ui auto | Enable color output for Git |
git config --global core.editor "<editor>" | Set the default text editor for Git |
git config --global alias.<alias> "<command>" | Set an alias for a Git command |
git config --global --unset <key> | Unset a Git configuration value |
git config --global --replace-all <key> "<value>" | Replace all instances of a Git configuration value |
git config --global credential.helper "<helper>" | Set a credential helper for Git |
git config --global push.default simple | Set the default push behavior for Git |
git config --global merge.conflictstyle diff3 | Set the default merge conflict style for Git |
Miscellaneous Commands
Command | Description |
---|---|
git reset <file> | Unstage a file |
git revert <commit> | Revert to a previous commit |
git cherry-pick <commit> | Apply changes from a specific commit |
git blame <file> | View the commit history for a file |
git push <remote> :<branch> | Delete a remote branch |
Advanced Commands
Command | Description |
---|---|
git rebase <branch> | Rebase the current branch onto another branch |
git cherry-pick --continue | Continue the process of cherry-picking after resolving conflicts |
git bisect start | Start a binary search to find the commit that introduced a bug |
git bisect good <commit> | Mark a commit as good during a binary search |
git bisect bad <commit> | Mark a commit as bad during a binary search |
git bisect reset | Finish the binary search and return to the original HEAD |
git reflog | Show a log of changes to the local repository's HEAD |
git fsck | Check the integrity of the Git database |
git gc | Clean up and optimize the Git repository |
Downloadable Git Reference PDFs
GitHub has a great pdf that you can print out and put on your wall next to your desk. And yes, GitLab has one too.
Recommended Git Clients
There are several Git clients that developers use to interact with repositories. Some notable ones include:
Git for Windows: A port of Git command line interface for Windows, featuring a GUI for repository management alongside the command line tools.
GitKraken: A cross-platform Git client with a user-friendly graphical interface, ideal for those new to Git.
GitHub Desktop: Developed by GitHub for Windows and macOS, this client provides a GUI for managing repositories and integrates well with other GitHub features.
SourceTree: An Atlassian Git client for Windows and macOS, providing a GUI for repository management and support for other version control systems like Mercurial.
Additionally, many developers favor the command line interface for Git interactions, appreciating the control it provides. Advanced users might find it especially handy, and the commands listed in our cheat sheet can provide quick help.
Git Facts You May Find Interesting
Git was developed by Linus Torvalds in 2005 to manage the Linux kernel development, with a focus on speed, efficiency, and support for distributed workflows.
Git's "directed acyclic graph" (DAG) data structure enables the tracking of different versions of the project and the changes made in each version.
Other version control systems inspired by Git include Mercurial, Subversion, and Perforce.
While primarily written in C, Git also includes scripts in Perl and Shell, enhancing its portability across various operating systems.
The Git ecosystem has expanded over the years, with various tools and extensions, like GitHub and GitLab, built around it to facilitate collaborative coding and project management.