Resets index entries and updates files in the working tree that are different between and HEAD.
If a file that is different between and HEAD has local changes, reset is aborted.
–keep
Resets the index and updates the files in the working tree that are different between and HEAD,
but keeps those which are different between the index and working tree (i.e.
which have changes which have not been added).
If a file that is different between and the index has unstaged changes, reset is aborted.
In other words, –merge does something like a git read-tree -u -m , but carries forward unmerged index entries.
–merge
Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated.
This is the default action.
If -N is specified, removed paths are marked as intent-to-add (see git-add(1)).
–mixed
Does not touch the index file or the working tree at all (but resets the head to , just like all modes do).
This leaves all your changed files ‘Changes to be committed’, as git status would put it.
–soft