Strongly discourage --update-head-ok in fetch-options documentation.
[gitweb.git] / Documentation / git-pull.txt
index 5a11da1f7424a4f2ff1375b6cb8d4f11440c47a3..13be992006d8252ca737e37dd21ed8f2d1e13412 100644 (file)
@@ -3,7 +3,7 @@ git-pull(1)
 
 NAME
 ----
-git-pull - Pull and merge from another repository.
+git-pull - Pull and merge from another repository or a local branch
 
 
 SYNOPSIS
@@ -20,70 +20,44 @@ Note that you can use `.` (current directory) as the
 <repository> to pull from the local repository -- this is useful
 when merging local branches into the current branch.
 
+
 OPTIONS
 -------
+include::merge-options.txt[]
+
+include::fetch-options.txt[]
+
 include::pull-fetch-param.txt[]
 
--a, \--append::
-       Append ref names and object names of fetched refs to the
-       existing contents of `$GIT_DIR/FETCH_HEAD`.  Without this
-       option old data in `$GIT_DIR/FETCH_HEAD` will be overwritten.
-
-include::merge-pull-opts.txt[]
-
-
-MERGE STRATEGIES
-----------------
-
-resolve::
-       This can only resolve two heads (i.e. the current branch
-       and another branch you pulled from) using 3-way merge
-       algorithm.  It tries to carefully detect criss-cross
-       merge ambiguities and is considered generally safe and
-       fast.  This is the default merge strategy when pulling
-       one branch.
-
-recursive::
-       This can only resolve two heads using 3-way merge
-       algorithm.  When there are more than one common
-       ancestors that can be used for 3-way merge, it creates a
-       merged tree of the common ancestores and uses that as
-       the reference tree for the 3-way merge.  This has been
-       reported to result in fewer merge conflicts without
-       causing mis-merges by tests done on actual merge commits
-       taken from Linux 2.6 kernel development history.
-       Additionally this can detect and handle merges involving
-       renames.
-
-octopus::
-       This resolves more than two-head case, but refuses to do
-       complex merge that needs manual resolution.  It is
-       primarily meant to be used for bundling topic branch
-       heads together.  This is the default merge strategy when
-       pulling more than one branch.
-
-ours::
-       This resolves any number of heads, but the result of the
-       merge is always the current branch head.  It is meant to
-       be used to supersede old development history of side
-       branches.
+include::urls.txt[]
 
+include::merge-strategies.txt[]
 
 EXAMPLES
 --------
 
 git pull, git pull origin::
-       Fetch the default head from the repository you cloned
-       from and merge it into your current branch.
-
-git pull -s ours . obsolete::
-       Merge local branch `obsolete` into the current branch,
-       using `ours` merge strategy.
+       Update the remote-tracking branches for the repository
+       you cloned from, then merge one of them into your
+       current branch.  Normally the branch merged in is
+       the HEAD of the remote repository, but the choice is
+       determined by the branch.<name>.remote and
+       branch.<name>.merge options; see gitlink:git-repo-config[1]
+       for details.
+
+git pull origin next::
+       Merge into the current branch the remote branch `next`;
+       leaves a copy of `next` temporarily in FETCH_HEAD, but
+       does not update any remote-tracking branches.
 
 git pull . fixes enhancements::
        Bundle local branch `fixes` and `enhancements` on top of
        the current branch, making an Octopus merge.
 
+git pull -s ours . obsolete::
+       Merge local branch `obsolete` into the current branch,
+       using `ours` merge strategy.
+
 git pull --no-commit . maint::
        Merge local branch `maint` into the current branch, but
        do not make a commit automatically.  This can be used
@@ -97,48 +71,29 @@ release/version name would be acceptable.
 Command line pull of multiple branches from one repository::
 +
 ------------------------------------------------
-$ cat .git/remotes/origin
-URL: git://git.kernel.org/pub/scm/git/git.git
-Pull: master:origin
-
 $ git checkout master
-$ git fetch origin master:origin +pu:pu maint:maint
-$ git pull . origin
+$ git fetch origin +pu:pu maint:tmp
+$ git pull . tmp
 ------------------------------------------------
 +
-Here, a typical `$GIT_DIR/remotes/origin` file from a
-`git-clone` operation is used in combination with
-command line options to `git-fetch` to first update
-multiple branches of the local repository and then
-to merge the remote `origin` branch into the local
-`master` branch.  The local `pu` branch is updated
-even if it does not result in a fast forward update.
-Here, the pull can obtain its objects from the local
-repository using `.`, as the previous `git-fetch` is
-known to have already obtained and made available
-all the necessary objects.
-
-
-Pull of multiple branches from one repository using `$GIT_DIR/remotes` file::
+This updates (or creates, as necessary) branches `pu` and `tmp`
+in the local repository by fetching from the branches
+(respectively) `pu` and `maint` from the remote repository.
 +
-------------------------------------------------
-$ cat .git/remotes/origin
-URL: git://git.kernel.org/pub/scm/git/git.git
-Pull: master:origin
-Pull: +pu:pu
-Pull: maint:maint
-
-$ git checkout master
-$ git pull origin
-------------------------------------------------
+The `pu` branch will be updated even if it is does not
+fast-forward; the others will not be.
 +
-Here, a typical `$GIT_DIR/remotes/origin` file from a
-`git-clone` operation has been hand-modified to include
-the branch-mapping of additional remote and local
-heads directly.  A single `git-pull` operation while
-in the `master` branch will fetch multiple heads and
-merge the remote `origin` head into the current,
-local `master` branch.
+The final command then merges the newly fetched `tmp` into master.
+
+
+If you tried a pull which resulted in a complex conflicts and
+would want to start over, you can recover with
+gitlink:git-reset[1].
+
+
+SEE ALSO
+--------
+gitlink:git-fetch[1], gitlink:git-merge[1], gitlink:git-repo-config[1]
 
 
 Author