Git Cheatsheet
A cheatsheet for our favourite scm git.
Let's go through this tldr
format git cheatsheet.
The Three States
Git Directory
- The .git directory is where Git stores the metadata and object database for the repositoryWorking Directory
- A copy of one version of the git project, taken from compressed database in the .git directoryStaging Area/Index
- File that stores information about what will next be committed into the git repository
Configure Tooling
git config --global user.name "[name]"
- Sets the name you want attached to your commit transactionsgit config --global user.email "[email address]"
- Sets the email you want attached to your commit transactionsgit config --global color.ui auto
- Enables helpful colorizations of command line input
Create Repositories
git init [project-name]
Creates a new local repository with the specified namegit clone [url]
- Downloads a project and its entire version history
Make Changes
git status
- Lists all new or modified files to be committedgit diff
- Shows file differences not yet stagedgit add [file]
- Snapshots the file in preparation for versioninggit diff --staged
- Shows file differences between staging and the last file versiongit reset [file]
- Unstages the file, but preserves its contentsgit commit -m "[descriptive message]"
- Records the file snapshots permanently in version history
Group Changes
git branch
- Lists all local branches in the current repositorygit branch [branch-name]
- Creates a new branchgit checkout [branch-name]
- Switches to the specified branch and updates the working directorygit merge [branch]
- Combines the specified branch's history into the current branchgit branch -d [branch-name]
- Deletes the specified branchgit remote add [remote-name] [url]
- Add a new remote git repository as a short namegit remote -v
- Lists all remote git repositories
Refactor Filenames
git rm [file]
- Deletes the file from the working directory and stages the deletiongit rm --cached [file]
- Removes the file from version control but preserves the file locallygit mv [file-original] [file-renamed]
- Changes the file name and prepares it for commit
Suppress Tracking
- A text file named .gitignore suppresses accidental versioning of files and paths matching the specified patterns
*.log build/ temp-*
git ls-files --other --ignored --exclude-standard
- Lists all ignored files in this project
Save Fragments
git stash
- Temporarily stores all modified tracking filesgit stash save [message]
- Save local modifications to a new stashgit stash pop
- Restores the most recently stashed filesgit stash list
- Lists all stashed changesetsgit stash show
- Show the changes recorded in the stashgit stash drop
- Discards the most recently stashed changeset
Review History
git log
- Lists version history for the current branchgit log --follow [file]
- Lists version history for a file, including renamesgit diff [first-branch]...[second-branch]
- Shows content differences between two branchesgit show [commit]
- Outputs metadata and content changes of the specified commit
Redo Commits
git reset [commit]
- Undoes all commits after [commit], preserving changes locallygit reset --hard [commit]
- Discards all history and changes back to the specified commit
Synchronize Changes
git fetch [bookmark] [branch]
- Downloads all history from the repository bookmark, optionally specifying branchgit merge [bookmark]/[branch]
- Combines bookmark's branch into current local branchesgit push [alias] [branch]
- Uploads all local branch commits to GitHubgit push [alias] :[branch]
- Deletes remote branchgit pull
- Downloads bookmark history and incorporates changesgit pull --rebase
- Downloads bookmark history and incorporates your changes on top of remote changesgit rebase --interactive --autosquash HEAD~N
- Squash N last commitsgit cherry-pick -n <sha>
- Cherry-pick a commitgit revert -n <sha>
- Revert a commit
Debugging
git blame [file]
- Show what revision and author last modified each line of a filegit bisect
- Use binary search to find the commit that introduced a bug