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 master
To 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 = stash
An alias expansion can be prefixed with an exclamation mark !
to treat it as a shell command.