]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Add a section explaining 2 meanings of the word "branch"
[git-wiki.git] / pep-git.txt
index 1b0f384a47f17f72ed3b6b0cf2ccf283d67aa5d8..6ed8bbaee8c84a8e0069952481ccb33b717a82eb 100644 (file)
@@ -110,6 +110,54 @@ something like that::
     $ 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
+=====================================
+
+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 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::
+
+    $ git branch -rv
+
+To see local and remote branches (and tags) pointing to commits run::
+
+    $ 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
 ==========================