git cribsheet

Unstage file

  • git reset -- <filename>

Discard local change to file

  • git checkout -- <filename>

Discard all local changes

  • git fetch
  • git checkout <branch>
  • git reset --hard origin/<branch>

This is a specific form of git reset --hard <commit> which resets your current branch to <commit>. origin/<branch> here refers to the HEAD commit of that branch at origin.

Revert

  • git revert ref_spec

Git revert undoes a single specified commit, making the changes necessary to do so at the HEAD of your current branch.

Get existing remote branch

https://stackoverflow.com/questions/9537392/git-fetch-remote-branch

  • git checkout --track origin/remote_branch_name

Branch deletion

Local branches

  • git branch -d <branch_name>

    -D to force deletion in the presence of local-only changes

Remote branches

https://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-locally-and-remotely

  • git push -d origin <branch>

    (Substitute origin for a different remote name if required).

Obsolete tracking branches

  • git diff --name-only --diff-filter=U

Show unmerged files in the diff between the working tree and the index (staging area for next commit).

Config files

git has three config files. In Windows:

  • system-wide (“system”) – gitconfig in the git install folder's mingw64\etc subdirectory (probably C:\Program Files\Git\mingw64\etc)
  • per-user (“global”) – .gitconfig in the root of the user's local profile
  • per-repo (“local”) – config in the repo's .git folder

Settings are overridden by values in more narrowly-scoped config (e.g. if the same property is set at user and repo level, the repo level takes precedence).

Can't find them?

Inspect properties to see where their values are set:

  • git config --list --show-origin

or just edit them (using the configured editor) via the command line:

  • git config --edit --system
  • git config --edit --global
  • git config --edit --local

Settings

Editor

By default the mighty vim. If that's not your cup of tea:

  • git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Terminal colours

Here's a possible config setup (thanks Nathan Hoad!)

[color]
  ui = auto
[color "branch"]
  current = yellow reverse
  local = yellow
  remote = green
[color "diff"]
  meta = yellow bold
  frag = magenta bold
  old = red bold
  new = green bold
[color "status"]
  added = green bold
  changed = yellow bold
  untracked = magenta bold

To set these up via the command line (e.g. for current branch as above):

  • git config --global color.branch.current "yellow reverse"

Unable to get local issuer certificate