Skip to content

Instantly share code, notes, and snippets.

@thaJeztah
Created September 28, 2018 12:31
Show Gist options
  • Save thaJeztah/c1ec7da23ab609b55133fd3c1dc12b8e to your computer and use it in GitHub Desktop.
Save thaJeztah/c1ec7da23ab609b55133fd3c1dc12b8e to your computer and use it in GitHub Desktop.
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 <[email protected]>"
    

    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
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment