Git is accompanied with a lot of documentation, both online and
offline.
+
Documentation for starters
--------------------------
`Git workflows
<https://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html>`_.
+
Advanced documentation
----------------------
`Git Wiki <https://git.wiki.kernel.org/index.php/Main_Page>`_.
+
Offline documentation
---------------------
`TortoiseGit <https://tortoisegit.org/>`_ is a Windows Shell Interface
to Git based on TortoiseSVN; open source.
+
Initial configuration
---------------------
to track upstream remotes/origin/v1 branch and checks out ``v1`` into
the working directory.
+
Updating local and remote-tracking branches
-------------------------------------------
$ git push origin tag 1.4.2
$ git push origin v1 master tag 2.1.7
+Or push all tags at once::
+
+ $ git push --tags origin
+
Don't move tags with ``git tag -f`` or remove tags with ``git tag -d``
after they have been published.
+
Private information
'''''''''''''''''''
Whatever you do, don't panic. Almost anything in git can be undone.
+
git checkout: restore file's content
------------------------------------
(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
--------------------------------------
difference very clearly. Bare repositories don't have indices or
working trees so in a bare repo only soft reset is possible.
+
Unstaging
'''''''''
<https://git-scm.com/book/en/Git-Basics-Undoing-Things>`_ for details
about unstaging and other undo tricks.
+
git reflog: reference log
-------------------------
$ git cherry-pick save-master~ save-master
$ git branch -D save-master # remove temporary branch
+
git revert: revert a commit
---------------------------
of merge. See the discussion `How to revert a faulty merge
<https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html>`_.
+
One thing that cannot be undone
-------------------------------
grep -Oless`` - in the latter case ``git grep`` passes ``+/pattern``
option to less.
+
bash/zsh completion
-------------------
Git-for-windows comes with git-bash for which bash completion is
installed and enabled.
+
bash/zsh prompt
---------------
be configured to allow access with great granularity; gitolite has a
lot of documentation.
-TODO: gitweb; cgit; Kallithea; pagure; gogs and gitea; gitlab.
-
-https://git.kernel.org/cgit/git/git.git/tree/gitweb
-
-http://git.zx2c4.com/cgit/
-
-https://kallithea-scm.org/
-
-https://pagure.io/
-
-http://gogs.io/ and http://gitea.io/
-
-https://about.gitlab.com/
+Web interface to browse repositories can be created using `gitweb
+<https://git.kernel.org/cgit/git/git.git/tree/gitweb>`_ and `cgit
+<http://git.zx2c4.com/cgit/about/>`_. Both are CGI scripts (written in
+Perl and C). In addition to web interface both provide read-only dumb
+http access for git (http(s):// URLs).
+
+There are also more advanced web-based development environments that
+include ability to create and manage users and groups, private, group
+and public repositories, and usually include issue trackers, wiki
+pages and other developers tools. Among these environments are
+`Kallithea <https://kallithea-scm.org/>`_ and `pagure
+<https://pagure.io/>`_, both are written in Python; `Gogs
+<http://gogs.io/>`_ is written in Go; when its development seemed to
+be stagnated there was a fork `Gitea <http://gitea.io/>`_, still
+active.
+
+And last but not least `Gitlab <https://about.gitlab.com/>`_. It's the
+most advanced web-based development environment. Written in Ruby,
+community edition is free and open source (MIT license).
From Mercurial to git