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.
|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
|View the current status of the repository
|View the commit history
|View differences between committed versions
Branching and Merging
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
|Pull changes from a remote repository
|Push local commits to a remote repository
|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
|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
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
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
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
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
|Show a log of changes to the local repository's HEAD
|Check the integrity of the Git database
|Clean up and optimize the Git repository
Downloadable Git Reference PDFs
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.
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.