Last active
April 18, 2020 12:58
-
-
Save bennadel/cbefbc3b4ca7895a8c35c86e68029dbe to your computer and use it in GitHub Desktop.
My Opinionated git Cheat Sheet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git status |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Outputs the changes between `head~` and `head` of the current branch. If | |
# only one commit is provided, other commit is assumed to be `head`. | |
git diff head~ | |
# Outputs the changes between the first commit and the second commit. | |
git diff head~~~..head~~ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# At this point, the following are equivalent and output the changes between | |
# the `head` commit of the `master` branch and the `head` commit of the | |
# `my-feature` branch. | |
git diff master | |
git diff master..head | |
git diff master..my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Outputs the changes made to the `README.md` file in the `head` commit of the | |
# `my-feature` branch. | |
git show my-feature -- README.md | |
# Outputs the changes made to the `README.md` file in the `19e771` commit. | |
git show 19e771 -- README.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Outputs the contents of the `README.md` file as defined in the `head` commit | |
# of the `my-feature` branch. | |
git show my-feature:README.md | |
# Outputs the contents of the `README.md` file as defined in the `19e771` | |
# commit. | |
git show 19e771:README.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Opens the `README.md` file from the `head` commit of the `my-feature` branch | |
# in the Sublime Text editor. | |
git show my-feature:README.md | subl | |
# Opens the `README.md` file from the `19e771` commit in the `less` viewer. | |
git show 19e771:README.md | less |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# While staying on the `my-feature` branch, copy the `README.md` file from | |
# the `master` branch into the current working tree. This will overwrite the | |
# current version of `README.md` in your working tree. | |
git checkout master -- README.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Copy the `head` commit-changes of the `my-feature` branch onto the `master` | |
# branch. This will create a new `head` commit on `master`. | |
git cherry-pick my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Assuming that `head~~~` and `19e771` are the same commit, the following are | |
# equivalent and will copy the changes in `19e771` to the `head` of the | |
# current branch (as a new commit). | |
git cherry-pick head~~~ | |
git cherry-pick 19e771 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git commit -m "Woot, finally finished!" | |
# Oops, you forgot a change. Edit the file and stage it. | |
# ... changes to the working tree (your file system). | |
git add oops.txt | |
# Adds the currently-staged changes (oops.txt) to the current commit, giving | |
# you a chance to update the commit message. | |
git commit --amend |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git add . | |
git commit -m "This is greet." | |
# Oh noes! You misspelled "great". You can edit the current commit message: | |
git commit --amend -m "This is great." |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Creates a new branch, `my-feature`, based on `master`. | |
git checkout -b my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# This will unwind the commits specific to the `my-feature` branch, pull in | |
# the missing `master` commits, and then replay your `my-feature` commits. | |
git rebase master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
git rebase master | |
# Fast-forward merge of `my-feature` changes into `master`, which means there | |
# is no creation of a "merge commit" - your `my-features` changes are simply | |
# added to the top of `master`. | |
git checkout master | |
git merge --ff-only my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Get the `my-feature` branch ready for merge. | |
git checkout my-feature | |
git rebase master | |
# Merge the `my-feature` branch into `master` creating a merge-commit. | |
git checkout master | |
git merge --no-ff my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Merge the feature branch in, creating a "merge commit". | |
git merge --no-ff my-feature | |
# On noes! You didn't mean to merge that in. Assuming that the "merge commit" | |
# is now the `head` of `master`, you can revert back to the commit's fist | |
# parent, the `master` branch: -m 1. And, since `head` and `master` are the | |
# same commit, the following are equivalent: | |
git revert -m 1 head | |
git revert -m 1 master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# > error: Already on 'master' | |
# While on the `master` branch, create the `my-feature` branch as a copy of | |
# the `master` branch. This way, your `my-feature` branch will contain all of # your recent changes. | |
git checkout -b my-feature | |
# Now that your changes are safely isolated, get back into your `master` | |
# branch and `reset` it with the `--hard` modifier so that your local index | |
# and file system will match the remote copy. | |
git checkout master | |
git reset --hard origin/master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# ... changes to the working tree (your file system). | |
git add . | |
# Remove the file from staging AND remove the changes from the file system. | |
git reset --hard |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# Update the remote copy of the `my-feature` branch in order to make sure that | |
# you are working with the most up-to-date remote content. | |
git fetch origin my-feature | |
# Now, reset the local copy of `my-feature` to match the published copy. This | |
# will update your index and your local file system to match the published | |
# version of `my-feature`. | |
git reset --hard origin/my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# List all of the local branches that have been merged into `master`. This | |
# command will be relative to the branch that you have checked-out. | |
git branch --merged |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# List all of the local branches that have NOT YET been merged into `master`. | |
# This command will be relative the branch you have checked-out. | |
git branch --no-merged |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Merge your `my-feature` branch into `master` creating a "merge commit." | |
git checkout master | |
git merge --no-ff my-feature | |
# Safely delete the merged-in `my-feature` branch. The `-d` modifier will | |
# error-out if the given branch has not yet been merged into the current | |
# branch. | |
git branch -d my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
git checkout my-feature | |
# At this point, the `-` refers to the `master` branch. | |
git checkout - | |
# At this point, the `-` refers to the `my-feature` branch. | |
git checkout - |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Force-delete the `my-feature` branch even though it has not been merged | |
# into the `master` branch. | |
git branch -D my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Safely delete the local copy of your `my-feature` branch. The `-d` modifier | |
# will error-out if the given branch has not been fully-merged into `master`. | |
git branch -d my-feature | |
# Delete the remote copy of the `my-feature` branch from the origin. The `:` | |
# prefix sends this through as a "delete" command for the given branch. | |
git push origin :my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
git merge --no-ff my-feature | |
# Oh noes! You forgot to pull in the latest remote copy of `master` before you | |
# merged your `my-feature` commits. No problem, just `--rebase` your local | |
# `master` on the remote branch. This will move your local changes to the tip | |
# of the `master` branch. | |
git pull --rebase | |
# Now that you've pulled-in the remote changes, you should be able to push | |
# your updated `master` branch. | |
git push origin master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git add . | |
# Oh noes! You didn't mean to add all of the files to the staging area. You | |
# can remove some of the staged files using the `--cached` modifier: | |
git rm --cached secrets.config |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git add . | |
# Oh noes! You didn't mean to add the ./config directory. You can recursively | |
# remove it with the `-r` modifier: | |
git rm --cached -r config/. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Create the `my-feature` branch based on `master`. | |
git checkout master | |
git checkout -b my-feature | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Getting close." | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Missed a bug." | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Uggggg! Why is this so hard?" | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Woot, finally got this working." | |
# At this point, your commit history is sloppy and would bring much shame on | |
# your family if it ended-up in `master`. As such, you need to squash the | |
# commits down into a single commit using an interactive rebase. Here, you're | |
# telling `git` to use the `master` commit as the starting point: | |
git rebase -i master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pick 27fb3d2 Getting close. | |
pick e8214df Missed a bug. | |
pick ce5ed14 Uggggg! Why is this so hard? | |
pick f7ee6ab Woot, finally got this working. | |
# Rebase b0fced..f7ee6ab onto b0fced (4 commands) | |
# | |
# Commands: | |
# p, pick = use commit | |
# r, reword = use commit, but edit the commit message | |
# e, edit = use commit, but stop for amending | |
# s, squash = use commit, but meld into previous commit | |
# f, fixup = like "squash", but discard this commit's log message | |
# x, exec = run command (the rest of the line) using shell | |
# d, drop = remove commit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pick 27fb3d2 Getting close. | |
s e8214df Missed a bug. | |
s ce5ed14 Uggggg! Why is this so hard? | |
s f7ee6ab Woot, finally got this working. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Assuming that the `my-feature` branch is the branch that needs to be fixed, | |
# start off my renaming the branch as a backup (the `-m` modifier performs a | |
# rename): | |
git checkout my-feature | |
git branch -m my-feature-backup | |
# Now, checkout the `master` branch and use it to create a new, clean | |
# `my-feature` branch starting point. | |
git checkout master | |
git checkout -b my-feature | |
# At this point, your `my-feature` branch and your `master` branch should be | |
# identical. Now, you can "squash merge" your old feature branch into the new | |
# and clean `my-feature` branch: | |
git merge --squash my-feature-backup | |
# All the file-changes should now be in the `my-feature` branch as staged | |
# edits ready to be committed. | |
git commit -m "This feature is done and awesome." | |
# Delete the old backup branch as it is no longer needed. You will have to | |
# force delete (`-D`) it since it was never merged into `master`. | |
git branch -D my-feature-backup |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Oh noes! Something urgent just came up - commit your changes to your feature | |
# branch and then go attend to the more pressing work. | |
git add . | |
git commit -m "Saving current work - jumping to more urgent matters." | |
git checkout master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Awesome updates." | |
git checkout master | |
# At this point, the `-` refers to the `my-feature` branch. | |
git merge - |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Oh noes! Something urgent just came up - checkout a new branch. This will | |
# move all of your current work (staged and unstaged) over to the new branch. | |
git checkout -b temp-work | |
# Commit any unstaged changes. | |
git add . | |
git commit -m "Saving current work - jumping to more urgent matters." | |
git checkout master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
git merge --no-ff my-feature | |
# Oh noes! There is a conflict in "code.js". To keep your version of the | |
# code.js file, you can check-it-out using --theirs and the file path: | |
git checkout --theirs code.js | |
git add . | |
git merge --continue |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
git cherry-pick --no-ff my-feature | |
# Oh noes! There is a conflict in "code.js". To keep your version of the | |
# code.js file, you can check-it-out using --theirs and the file path: | |
git checkout --theirs code.js | |
git add . | |
git merge --continue |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
git rebase master | |
# Oh noes! There is a conflict in "code.js". To keep your version of the | |
# code.js file, you can check-it-out using --theirs and the file path: | |
git checkout --theirs code.js | |
git add . | |
git rebase --continue |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted the file "projects.js". | |
git log --diff-filter=D --name-only -- wwwroot/app/projects.js |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted the file "projects.js" that resided somewhere | |
# in the "app" directory. The double-asterisk matches across directories. | |
git log --diff-filter=D --name-only -- "wwwroot/app**/projects.js" | |
# You can even use pattern matching on the file name itself if you can't | |
# remember exactly what it was named. | |
git log --diff-filter=D --name-only -- "wwwroot/**/*project*.js" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted the file "projects.js", but only show a one-line | |
# commit message and the list of files. | |
git log --diff-filter=D --name-only --oneline -- "wwwroot/app**/projects.js" | |
# To get slightly easier-to-read output, you can use the `--pretty` option with | |
# some specialized formatting (instead of the `--oneline` option). This | |
# includes the abbreviated hash, the author, the relative date, and the | |
# subject line. And, includes some human-friendly line-breaks. | |
git log --diff-filter=D --name-only --pretty=format:"%Cgreen%h - %an, %ar : %s" -- "wwwroot/app**/projects.js" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted a file that contained the code 'isProcessed'. | |
git log -S 'isProcessed' --diff-filter=D --name-only | |
# To limit the search to the "app" directory, you can include a file path after | |
# the final `--` delimiter. | |
git log -S 'isProcessed' --diff-filter=D --name-only -- wwwroot/app/ | |
# To make the search case-insensitive, include the -i option. | |
git log -S 'isprocessed' -i --diff-filter=D --name-only |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted a file that contained the code `isProcessed`, | |
# matching on strict word-boundaries. | |
git log -G '\bisProcessed\b' --diff-filter=D --name-only | |
# To make the search case-insensitive, include the `-i` option. | |
git log -G '\bisprocessed\b' -i --diff-filter=D --name-only |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted a file that contained the code `isProcessed`, | |
# matching on strict word-boundaries. | |
git log -G '\bisProcessed\b' --diff-filter=D --name-only --oneline | |
# To get slightly easier-to-read output, you can use the `--pretty` option with | |
# some specialized formatting (instead of the `--oneline` option). This | |
# includes the abbreviated hash, the author, the relative date, and the | |
# subject line. And, includes some human-friendly line-breaks. | |
git log -G '\bisProcessed\b' --diff-filter=D --name-only --pretty=format:"%Cgreen%h - %an, %ar : %s" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout my-feature | |
# ... changes to the working tree (your file system). | |
git add . | |
git commit -m "Minor tweaks." | |
git checkout master | |
# At this point, the `-` refers to the `my-feature` branch. | |
git cherry-pick - |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find the commit that deleted a file that contained the code `isProcessed`, | |
# matching on strict word-boundaries. | |
git log -G '\bisProcessed\b' --diff-filter=D --name-only --oneline | |
# The above `log` action listed commit `aef037`. Use `git show` to output the | |
# changes made in the given commit. | |
git show aef037 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git diff --stat |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git checkout master | |
# Outputs the changes made to the `head` commit of the current (`master`) | |
# branch. | |
git show | |
# Outputs the changes made to the `head` commit of the `my-feature` branch. | |
git show my-feature |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Outputs the changes made in the commit with the given hash. | |
git show 19e771 | |
# Outputs the changes made in in a previous commit of the current (`master`) | |
# branch. | |
git show head~ # Show changes in first parent. | |
git show head~~ # Show changes in first parent's first parent. | |
git show head~~~ # Show changes in first parent's first parent's first parent. | |
# Outputs the changes made in a previous commit of the `my-feature` branch. | |
git show my-feature~ | |
git show my-feature~~ | |
git show my-feature~~~ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Outputs the list of files changed in the commit with the given hash. | |
git show 19e771 --stat |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment