]> git.phdru.name Git - git-wiki.git/commitdiff
Add subsection "Updating local and remote branches"
authorOleg Broytman <phd@phdru.name>
Tue, 2 Jun 2015 16:58:55 +0000 (19:58 +0300)
committerOleg Broytman <phd@phdru.name>
Tue, 2 Jun 2015 16:58:55 +0000 (19:58 +0300)
pep-git.txt

index 9f7eeea29faf08bcbecd3a224efe9b220606409e..31dc43849ceb50b545de71963fd3a289466a0bc2 100644 (file)
@@ -159,6 +159,54 @@ 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.
 
+Updating local and remote branches
+----------------------------------
+
+There is a major difference between
+
+::
+
+    $ git fetch REMOTE BRANCH
+
+and
+
+::
+
+    $ git fetch REMOTE BRANCH:BRANCH
+
+The first command fetches commits from the named BRANCH in the REMOTE
+repository that are not in your repository and leaves the id (the
+hash) of the head commit in file .git/FETCH_HEAD. But it doesn't
+update any branch (doesn't move any label).
+
+The second command fetches commits from the named BRANCH in the REMOTE
+repository that are not in your repository and updates both the local
+branch BRANCH and its upstream remote branch. But it refuses to update
+branches in case of non-fast-forward. And it refuses to update the
+current branch.
+
+The first command is used internall by ``git pull``.
+
+::
+
+    $ git pull REMOTE BRANCH
+
+is equivalent to
+
+::
+
+    $ git fetch REMOTE BRANCH
+    $ git merge FETCH_HEAD # FETCH_HEAD is a literal here
+
+Certainly, BRANCH in that case should be your current branch. If you
+want to merge a different branch into your current branch first update
+that non-current branch and then merge::
+
+    $ git fetch origin v1:v1 # Update v1
+    $ git pull --rebase origin v2 # Update the current branch v2 using
+                                  # rebase instead of merge
+    $ git merge v1
+
 
 Commit editing and caveats
 ==========================