DEV Community

Cover image for Git & GitHub cheatsheet
Dionis
Dionis

Posted on • Edited on

Git & GitHub cheatsheet

What is Git

Git is a version control system used for tracking changes in computer files. It is generally used for source code management in software development.

  • Git is used to tracking changes in the source code
  • The distributed version control tool is used for source code management
  • It allows multiple developers to work together
  • It supports non-linear development through its thousands of parallel branches

📸 Creating Snapshots

Initializing a repository

$ git init 
Enter fullscreen mode Exit fullscreen mode

Staging files

$ git add file1.js # Stages a single file $ git add file1.js file2.js # Stages multiple files $ git add *.js # Stages with a pattern $ git add . # Stages the current directory and all its content 
Enter fullscreen mode Exit fullscreen mode

Viewing the status

$ git status # Full status $ git status -s # Short status 
Enter fullscreen mode Exit fullscreen mode

Committing the staged files

$ git commit -m “Message”. # Commits with a one-line message $ git commit # Opens the default editor to type a long message 
Enter fullscreen mode Exit fullscreen mode

Skipping the staging area

$ git commit -am “Message” 
Enter fullscreen mode Exit fullscreen mode

Removing files

$ git rm file1.js # Removes from working directory and staging area $ git rm --cached file1.js. # Removes from staging area only 
Enter fullscreen mode Exit fullscreen mode

Renaming or moving files

$ git mv file1.js file1.txt 
Enter fullscreen mode Exit fullscreen mode

Viewing the staged/unstaged changes

$ git diff # Shows unstaged changes $ git diff --staged # Shows staged changes $ git diff --cached # Same as the above 
Enter fullscreen mode Exit fullscreen mode

Viewing the history

$ git log # Full history $ git log --oneline # Summary $ git log --reverse # Lists the commits from the oldest to the newest 
Enter fullscreen mode Exit fullscreen mode

Viewing a commit

$ git show 921a2ff # Shows the given commit $ git show HEAD # Shows the last commit $ git show HEAD~2 # Two steps before the last commit $ git show HEAD:file.js # Shows the version of file.js stored in the last ... commit 
Enter fullscreen mode Exit fullscreen mode

Unstaging files (undoing git add)

$ git restore --staged file.js # Copies the last version of file.js from repo ... to index 
Enter fullscreen mode Exit fullscreen mode

Discarding local changes

$ git restore file.js # Copies file.js from index to working directory $ git restore file1.js file2.js # Restores multiple files in working directory $ git restore . # Discards all local changes (except untracked files) $ git clean -fd # Removes all untracked files 
Enter fullscreen mode Exit fullscreen mode

Restoring an earlier version of a file

$ git restore --source=HEAD~2 file.js 
Enter fullscreen mode Exit fullscreen mode

📥 Browsing History

Viewing the history

$ git log --stat # Shows the list of modified files $ git log --patch # Shows the actual changes (patches) 
Enter fullscreen mode Exit fullscreen mode

Filtering the history

$ git log -3 # Shows the last 3 entries $ git log --author=“Mosh” $ git log --before=“2020-08-17” $ git log --after=“one week ago” $ git log --grep=“GUI” # Commits with “GUI” in their message $ git log -S“GUI” # Commits with “GUI” in their patches $ git log hash1..hash2 # Range of commits $ git log file.txt # Commits that touched file.txt 
Enter fullscreen mode Exit fullscreen mode

Formatting the log output

$ git log --pretty=format:”%an committed %H” 
Enter fullscreen mode Exit fullscreen mode

Creating an alias

$ git config --global alias.lg “log --oneline" 
Enter fullscreen mode Exit fullscreen mode

Viewing a commit

$ git show HEAD~2 $ git show HEAD~2:file1.txt # Shows the version of file stored in this commit 
Enter fullscreen mode Exit fullscreen mode

Comparing commits

$ git diff HEAD~2 HEAD. # Shows the changes between two commits $ git diff HEAD~2 HEAD file.txt. # Changes to file.txt only 
Enter fullscreen mode Exit fullscreen mode

Checking out a commit

$ git checkout dad47ed # Checks out the given commit $ git checkout master # Checks out the master branch 
Enter fullscreen mode Exit fullscreen mode

Finding a bad commit

$ git bisect start $ git bisect bad # Marks the current commit as a bad commit $ git bisect good ca49180 # Marks the given commit as a good commit $ git bisect reset # Terminates the bisect session 
Enter fullscreen mode Exit fullscreen mode

Finding contributors

$ git shortlog 
Enter fullscreen mode Exit fullscreen mode

Viewing the history of a file

$ git log file.txt # Shows the commits that touched file.txt $ git log --stat file.tx # Shows statistics (the number of changes) for file.txt $ git log --patch file.txt. # Shows the patches (changes) applied to file.txt 
Enter fullscreen mode Exit fullscreen mode

Finding the author of lines

$ git blame file.txt # Shows the author of each line in file.txt 
Enter fullscreen mode Exit fullscreen mode

Tagging

$ git tag v1.0 # Tags the last commit as v1.0 $ git tag v1.0 5e7a828 # Tags an earlier commit $ git tag # Lists all the tags $ git tag -d v1.0 # Deletes the given tag 
Enter fullscreen mode Exit fullscreen mode

🌿 Branching & Merging

Managing branches

$ git branch bugfix # Creates a new branch called bugfix $ git checkout bugfix # Switches to the bugfix branch $ git switch bugfix # Same as the above $ git switch -C bugfix # Creates and switches $ git branch -d bugfix # Deletes the bugfix branch 
Enter fullscreen mode Exit fullscreen mode

Comparing branches

$ git log master..bugfix # Lists the commits in the bugfix branch not in master $ git diff master..bugfix # Shows the summary of changes 
Enter fullscreen mode Exit fullscreen mode

Stashing

$ git stash push -m “New tax rules” # Creates a new stash $ git stash list # Lists all the stashes $ git stash show stash@{1} # Shows the given stash $ git stash show 1 # shortcut for stash@{1} $ git stash apply 1 # Applies the given stash to the working dir $ git stash drop 1 # Deletes the given stash $ git stash clear # Deletes all the stashes 
Enter fullscreen mode Exit fullscreen mode

Merging

$ git merge bugfix # Merges the bugfix branch into the current branch $ git merge --no-ff bugfix # Creates a merge commit even if FF is possible $ git merge --squash bugfix # Performs a squash merge $ git merge --abort # Aborts the merge 
Enter fullscreen mode Exit fullscreen mode

Viewing the merged branches

$ git branch --merged # Shows the merged branches $ git branch --no-merged # Shows the unmerged branches 
Enter fullscreen mode Exit fullscreen mode

Rebasing

$ git rebase master # Changes the base of the current branch 
Enter fullscreen mode Exit fullscreen mode

Cherry picking

$ git cherry-pick dad47ed # Applies the given commit on the current branch 
Enter fullscreen mode Exit fullscreen mode

👥 Collaboration

Cloning a repository

$ git clone url 
Enter fullscreen mode Exit fullscreen mode

Syncing with remotes

$ git fetch origin master # Fetches master from origin $ git fetch origin # Fetches all objects from origin $ git fetch # Shortcut for “git fetch origin”  $ git pull # Fetch + merge $ git push origin master # Pushes master to origin $ git push # Shortcut for “git push origin master” 
Enter fullscreen mode Exit fullscreen mode

Sharing tags

$ git push origin v1.0 # Pushes tag v1.0 to origin $ git push origin —delete v1.0 
Enter fullscreen mode Exit fullscreen mode

Sharing branches

$ git branch -r # Shows remote tracking branches $ git branch -vv # Shows local & remote tracking branches $ git push -u origin bugfix # Pushes bugfix to origin $ git push -d origin bugfix # Removes bugfix from origin 
Enter fullscreen mode Exit fullscreen mode

Managing remotes

$ git remote # Shows remote repos $ git remote add upstream url # Adds a new remote called upstream $ git remote rm upstream # Remotes upstream 
Enter fullscreen mode Exit fullscreen mode

📜 Rewriting History

Undoing commits

$ git reset --soft HEAD^ # Removes the last commit, keeps changed staged $ git reset --mixed HEAD^ # Unstages the changes as well $ git reset --hard HEAD^ # Discards local changes 
Enter fullscreen mode Exit fullscreen mode

Reverting commits

$ git revert 72856ea # Reverts the given commit $ git revert HEAD~3.. # Reverts the last three commits  $ git revert --no-commit HEAD~3.. 
Enter fullscreen mode Exit fullscreen mode

Recovering lost commits

$ git reflog # Shows the history of HEAD $ git reflog show bugfix # Shows the history of bugfix pointer 
Enter fullscreen mode Exit fullscreen mode

Amending the last commit

$ git commit --amend 
Enter fullscreen mode Exit fullscreen mode

Interactive rebasing

$ git rebase -i HEAD~5 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)