Distance from HEAD
There are several ways to refer to a previous commit from HEAD.
-
HEAD~- refers to the first parent.HEAD~2- first parent’s first parent.HEAD~~- alternative form.
-
HEAD^- same as above.HEAD^2- second parent (for merges).
-
HEAD@{1}- same as above.HEAD@{2}- parent’s parent.
Files (Staging Area)
Unintuitively, the git reset command is used for refs and files
-
git add «file»- stage for commit.git add -A- new, modified, and deleted files.git add -u- modified and deleted files (new files are ignored).git add .- new and modified (deleted files are ignored).
git reset «file»- unstage. Think of it as the opposite togit add.git reset --hard- equivalent togit reset . ; git checkout ..
checkout vs. reset
git reset moves both the HEAD and branch pointer. git checkout only moves the HEAD, detaching it.
To reattach a detached HEAD,
$ git checkout «branch» # e.g., git checkout masterTo undo an accidental git reset,
$ git reflog
$ git reset «hash»Alias
The config files to set aliases are found in ~/.gitconfig. You can create a section in the file as follows:
[alias]
ac = !git add -A && git commit -m
c = commit
co = checkout
l = log --all --decorate --oneline --graph
s = status
sh = stashAn alias expansion can be prefixed with an exclamation mark ! to treat it as a shell command.