]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Change wording
[git-wiki.git] / pep-git.txt
index 0d33a63fd8fd6f9331cd182a43677b2b6e8d6d08..9f7eeea29faf08bcbecd3a224efe9b220606409e 100644 (file)
@@ -14,7 +14,7 @@ Abstract
 
 This Informational PEP collects information about git. There is, of
 course, a lot of documentation for git, so the PEP concentrates on
-more complex issues, topics and scenarios.
+more complex issues, scenarios and topics.
 
 The plan is to extend the PEP in the future collecting information
 about equivalence of Mercurial and git scenarios to help migrating
@@ -86,7 +86,9 @@ Initial configuration
 ---------------------
 
 This simple code is often appears in documentation, but it is
-important so let repeat it here::
+important so let repeat it here. Git marks every commit with author
+and commiter names/emails, so configure your real name and preferred
+email::
 
     $ git config --global user.name "User Name"
     $ git config --global user.email user.name@example.org
@@ -98,9 +100,9 @@ Examples in this PEP
 Examples of git commands in this PEP use the following approach. It is
 supposed that you, the user, works with a local repository named
 ``python`` that has an upstream remote repo named ``origin``. Your
-local repo has two branches ``v1`` and ``v2``. Usually the currently
-checked out branch is ``v2``. That is, it's assumed you did something
-like::
+local repo has two branches ``v1`` and ``v2``. For most examples the
+currently checked out branch is ``v2``. That is, it's assumed you did
+something like that::
 
     $ git clone -b v1 http://git.python.org/python.git
     $ cd python
@@ -108,6 +110,56 @@ like::
     $ 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 line of
+commits (possibly 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. Lines of commits
+are by itself unnamed and are usually only lengthening and merging.
+Labels, on the other hand, can be created, moved, renamed and deleted
+freely.
+
+
+Remote repository and remote branches
+=====================================
+
+Another example of slightly misleading terminology. Remote
+repositories are really remote, you access them 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 branches (pointers to commits)
+in your local repository. They are there for you 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). Remote branches
+live under ``remotes/REMOTE`` namespaces, e.g. ``remotes/origin/v2``.
+
+To see the status of remote branches run::
+
+    $ git branch -rv
+
+To see local and remote branches (and tags) pointing to commits::
+
+    $ git log --decorate
+
+You never do your own development on remote branches. You create a
+local branch that has a remote branch as an upstream and do
+development on that local branch. On push git updates remote branches,
+and on pull git updates remote branches and fast-forwards, merges or
+rebases local branches.
+
+When you do an initial clone like this::
+
+    $ git clone -b v1 http://git.python.org/python.git
+
+git clones remote repository ``http://git.python.org/python.git`` to
+directory ``python``, creates remote branches and checks out branch
+``v1`` into the working directory.
+
+
 Commit editing and caveats
 ==========================
 
@@ -121,9 +173,11 @@ To see what commits have not been published yet compare the head of the
 branch with its upstream remote branch::
 
     $ git log origin/v2..
+    $ git log origin/v1..v1
 
 For every branch that has an upstream remote branch git maintains an
-alias @{upstream} (short version @{u})::
+alias @{upstream} (short version @{u}), so the commands above can be
+given as::
 
     $ git log @{u}..
     $ git log v1@{u}..v1
@@ -132,7 +186,7 @@ To see the status of all branches::
 
     $ git branch -avv
 
-To compare the status of local branches with remote repo::
+To compare the status of local branches with remote repo::
 
     $ git remote show origin
 
@@ -148,6 +202,72 @@ already been pushed. Not a problem until commits are in a public
 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.
+
+
+Tips and tricks
+===============
+
+TODO: bash/zsh completion, bash/zsh prompt.
+
+
+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
 ==========