====
Whatever you do, don't panic. Almost anything in git can be undone.
+
+git checkout: restore file's content
+------------------------------------
+
``git checkout``, for example, can be used to restore the content of
file(s) to that one of a commit. Like this::
(Do not use ``git checkout`` to view a content of a file in a commit,
use ``git cat-file -p``; e.g. ``git cat-file -p HEAD~:path/to/README``).
+git reset: remove (non-pushed) commits
+--------------------------------------
+
``git reset`` moves the head of the current branch. The head can be
moved to point to any commit but it's often used to remove a commit or
a few (preferably, non-pushed ones) from the top of the branch - that
difference very clearly. Bare repositories don't have indices or
working trees so in a bare repo only soft reset is possible.
+Unstaging
+'''''''''
+
Mixed mode reset with a path or paths can be used to unstage changes -
that is, to remove from index changes added with ``git add`` for
committing. See `The Book
<https://git-scm.com/book/en/Git-Basics-Undoing-Things>`_ for details
about unstaging and other undo tricks.
-TODO: describe undo strategies: git reflog, git revert.
-"Commit early, commit often".
+git reflog: reference log
+-------------------------
+
+git revert: revert a commit
+---------------------------
How to undo a merge
https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html
+One thing that cannot be undone
+-------------------------------
+
+"Commit early, commit often".
+
Merge or rebase?
================