$ git checkout -b v2
+Branches and branches
+=====================
+
+Git terminology can be a bit misleading. Take, for example, the term
+"branch". In git it has two meanings. A branch is a directed chain of
+commits (possible with merges). And a branch is a label or a pointer
+assigned to a line of commits. It is important to differentiate when
+you talk about commits and when about their labels. Chains of commits
+are unnamed and are usually only lengthening. Labels, on the other
+hand, can be created, moved, renamed and deleted freely.
+
+
Remote repository and remote branches
=====================================
-Git terminology can be a bit misleading. Take, for example, terms
-"remote repository" and "remote branches". A remote repository is
+Another example of misleading terminology. A remote repository is
really remote, you access it via network (well, a remote repository
can be on your local disk, but it's still remote because it's not the
current repo).
-Remote branches, on the other hand, are pointers to commits in your
-local repository. They are there for git to remember what branches and
-commits have been pushed from and pulled to what remote repos (you can
-pull from and push to many remotes).
+Remote branches, on the other hand, are branches (pointers to commits)
+in your local repository. They are there for git to remember what
+branches and commits have been pulled from and pushed to what remote
+repos (you can pull from and push to many remotes).
To see the status of remote branches::
repository.
+Undo
+====
+
+TODO: describe undo strategies: git reset, git revert, git checkout,
+git reflog. "Commit early, commit often".
+
+How to undo a merge
+https://kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html
+
+
+Advanced topics
+===============
+
+Staging area
+------------
+
+Staging area aka index is a distinguishing feature of git. See
+`WhatIsTheIndex
+<https://git.wiki.kernel.org/index.php/WhatIsTheIndex>`_ and
+`IndexCommandQuickref
+<https://git.wiki.kernel.org/index.php/IndexCommandQuickref>`_ in Git
+Wiki.
+
+
+Advanced configuration
+======================
+
+Line endings
+------------
+
+Git has builtin mechanisms to handle line endings.
+
+TODO: describe crlf configuration and .gitattributes.
+
+
+Null-merges
+===========
+
+Git has a builtin strategy for what Python core developers call
+"null-merge"::
+
+ $ git merge -s ours v1 # null-merge v1 into v2
+
+
+Database maintenance
+====================
+
+TODO: dangling objects, git gc, git repack.
+
+
+From Mercurial to git
+=====================
+
+Mercurial for Git users https://mercurial.selenic.com/wiki/GitConcepts
+
+https://github.com/felipec/git-remote-hg
+
+https://hg-git.github.io/
+
+
References
==========