Instantly share code, notes, and snippets.

Embed
What would you like to do?
Git cheat list

Git cheat list

  • stashing everything except staged changes:

    git stash -ku
    
  • fixing dates and authors in the commits:

    git rebase -i HEAD~<NUMBER_OF_LAST_COMMITS_TO_REBASE>
    

    now mark all the commits listed with e (or edit), save

    now do

    git commit --amend --date="now" --author="Aleksey Bykov <aleksey.bykov@gmail.com>"
    

    or

    git commit --amend --reset-author --no-edit
    

    now do

    git rebase --continue
    

    repeat until all is done

  • list of commits that are not in master:

    git log --oneline fix/bld/48976-49181-gold-bar ^master
    git log --cherry-mark --oneline fix/bld/48976-49181-gold-bar...master
    git log --cherry-mark --oneline fix/bld/48976-49181-gold-bar..master
    
  • specifying revisions: http://schacon.github.io/git/git-rev-parse.html#_specifying_revisions

  • view a diff of 2 files in 2 different commits:

    git diff <HASH-1>:<PATH-A> <HASH-2>:<PATH-B>
    
  • show file at certain revision:

    git show <HASH>:<PATH>
    
  • list of all affected files both tracked/untracked (for automation)

    git status --porcelain
    
  • name of the current banch and nothing else (for automation)

    git rev-parse --abbrev-ref HEAD
    
  • all commits that your branch have that are not yet in master

    git log master..<HERE_COMES_YOUR_BRANCH_NAME>
    
  • setting up a character used for comments

    git config core.commentchar <HERE_COMES_YOUR_COMMENT_CHAR>
    
  • fixing fatal: Could not parse object after unsuccessful revert

    git revert --quit
    
  • view diff with inline changes (by lines)

    git diff --word-diff=plain master
    
  • view diff of changes in a single line file (per char)

    git diff --word-diff-regex=. master
    
  • view quick stat of a diff

    git diff --shortstat master
    git diff --numstat master
    git diff --dirstat master
    
  • undo last just made commit

    git reset HEAD~
    
  • list last 20 hashes in reverse

    git log --format="%p..%h %cd %<(17)%an %s" --date=format:"%a %m/%d %H:%M" --reverse -n 20
    
  • list commits between dates

    git log --format="%p..%h %cd %<(17)%an %s" --date=format:"%a %m/%d %H:%M" --reverse --after=2016-11-09T00:00:00-05:00 --before=2016-11-10T00:00:00-05:00
    
  • try a new output for diffing

    git diff --compaction-heuristic ...
              --color-words ...
    
  • enable more thorough comparison

    git config --global diff.algorithm patience
    
  • restoring a file from a certain commit relative to the latest

    git checkout HEAD~<NUMBER> -- <RELATIVE_PATH_TO_FILE>
    
  • restoring a file from a certain commit relative to the given commit

    git checkout <COMMIT_HASH>~<NUMBER> -- <RELATIVE_PATH_TO_FILE>
    
  • restoring a file from a certain commit

    git checkout <COMMIT_HASH> -- <RELATIVE_PATH_TO_FILE>
    
  • creating a diff file from unstaged changes for a specific folder

    git diff -- <RELATIVE_PATH_TO_FOLDER> changes.diff
    
  • applying a diff file

    • go to the root directory of your repository
    • run:
      git apply changes.diff
      
  • show differences between last commit and currrent changes:

    git difftool -d
    
  • referring to:

    • last commits ... HEAD~1 ...
    • last 3 commits ... HEAD~3 ...
  • show the history of changes of a file

    git log -p -- ./Scripts/Libs/select2.js
    
  • ignoring whitespaces

    git rebase --ignore-whitespace <BRANCH_NAME>
    
  • pulling for fast-forward only (eliminating a chance for unintended merging)

    git pull --ff-only
    
  • list of all tags

    git fetch
    git tag -l
    
  • archive a branch using tags

    git tag <TAG_NAME> <BRANCH_NAME>
    git push origin --tags
    

    you can delete your branch now

  • get a tagged branch

    git checkout -b <BRANCH_NAME> <TAG_NAME>
    
  • list of all branches that haven't been merged to master

    git branch --no-merge master
    
  • enable more elaborate diff algorithm by default

    git config --global diff.algorithm histogram
    
  • list of all developers

    git shortlog -s -n -e
    
  • display graph of branches

    git log --decorate --graph --all --date=relative
    

    or

    git log --decorate --graph --all --oneline 
    
  • remembering the password

    git config --global credential.helper store
    git fetch
    

    the first command tells git to remember the credentials that you are going to provide for the second command

  • path to the global config

    C:\Users\Bykov\.gitconfig
    
  • example of a global config

    [user]
        email = *****
        name = Aleksey Bykov
        password = *****
    [merge]
        tool = p4merge
    [mergetool "p4merge"]
        cmd = p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
        path = \"C:/Program Files/Perforce\"
        trustExitCode = false
    [push]
        default = simple
    [diff]
        tool = meld
        compactionHeuristic = true
    [difftool "p4merge"]
        cmd = p4merge.exe \"$LOCAL\" \"$REMOTE\"
        path = C:/Program Files/Perforce/p4merge.exe
    [difftool "meld"]
        cmd = \"C:/Program Files (x86)/Meld/Meld.exe\" \"$LOCAL\" \"$REMOTE\"
        path = C:/Program Files (x86)/Meld/Meld.exe
    
  • viewing differences between current and other branch

    git difftool -d BRANCH_NAME
    
  • viewing differences between current and stash

    git difftool -d stash
    
  • viewing differences between several commits in a diff tool

    git difftool -d HEAD@{2}...HEAD@{0}
    
  • view all global settings

    git config --global -l
    
  • delete tag

    git tag -d my-tag
    git push origin :refs/tags/my-tag
    
  • pushing tags

    git push --tags
    
  • checking the history of a file or a folder

    git log -- <FILE_OR_FOLDER>
    
  • disabling the scroller

    git --no-pager <...>
    
  • who pushed last which branch

    git for-each-ref --format="%(committerdate) %09 %(refname) %09 %(authorname)"
    
  • deleting remote branch

    git push origin :<BRANCH_NAME>
    
  • deleting remote branch localy

    git branch -r -D <BRANCH_NAME>
    

    or to sync with the remote

    git fetch --all --prune
    
  • deleting local branch

    git branch -d <BRANCH_NAME>
    
  • list actual remote branchs

    git ls-remote --heads origin
    
  • list all remote (fetched) branches

    git branch -r
    
  • list all local branches

    git branch -l
    
  • find to which branch a given commit belongs

    git branch --contains <COMMIT>
    
  • updating from a forked repository

    git remote add upstream https://github.com/Microsoft/TypeScript.git
    git fetch upstream
    git rebase upstream/master
    
@gernd

This comment has been minimized.

gernd commented Feb 17, 2017

thanks for sharing! how about categorizing (e.g. inserting some headlines) these commands? (working with branches, working with tags...)

@abrahaobittar

This comment has been minimized.

abrahaobittar commented Feb 17, 2017

thanks for sharing! how about categorizing (e.g. inserting some headlines) these commands? (working with branches, working with tags...)
^

@luispcosta

This comment has been minimized.

luispcosta commented Feb 17, 2017

Thanks man! Pretty cool 👍

@kbilsted

This comment has been minimized.

kbilsted commented Feb 17, 2017

add git help

@jmaister

This comment has been minimized.

jmaister commented Feb 17, 2017

I am missing this:

Pull, rebase, autostash

git pull --rebase --autostash
@David-Carlson

This comment has been minimized.

David-Carlson commented Feb 17, 2017

Every time I see a git cheat sheet (especially complex ones), I am sad for how ridiculously complicated it is, and that I'll always have to look them up.

@iKevinShah

This comment has been minimized.

iKevinShah commented Feb 18, 2017

@David-Carlson,

You are not alone ...

@aleksey-bykov,

Thanks for the cheat sheet :)

@apfeltee

This comment has been minimized.

apfeltee commented Feb 19, 2017

Good stuff right there 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment