git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 7/8] pull: update docs & code for option compatibility with rebasing

From
Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>
Date
Jul 21, 2021, 01:42 UTC
Message-ID
<90d49e0fb7897512d7386a72787bb15c3f23a4f6.1626831744.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1049.v2.git.git.1626831744.gitgitgadget@gmail.com>
From: Elijah Newren <newren@gmail.com>

git-pull.txt includes merge-options.txt, which is written assuming merges will happen. git-pull has allowed rebases for many years; update the documentation to reflect that.

While at it, pass any `--signoff` flag through to the rebase backend too so that we don't have to document it as merge-specific. Rebase has supported the --signoff flag for years now as well.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 Documentation/git-merge.txt     |  2 ++
 Documentation/git-pull.txt      |  9 ++++----
 Documentation/merge-options.txt | 40 +++++++++++++++++++++++++++++++++
 builtin/pull.c                  |  2 ++
 4 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index 3819fadac1f..e4f3352eb58 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -61,6 +61,8 @@ merge has resulted in conflicts.
 
 OPTIONS
 -------
+:git-merge: 1
+
 include::merge-options.txt[]
 
 -m <msg>::
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index cad3f6bfcee..077961dfa1f 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -19,13 +19,12 @@ Incorporates changes from a remote repository into the current branch.
 If the current branch is behind the remote, then by default it will
 fast-forward the current branch to match the remote.  If the current
 branch and the remote have diverged, the user needs to specify how to
-reconcile the divergent branches with `--no-ff`, `--ff`, or `--rebase`
-(or the corresponding configuration options in `pull.ff` or
-`pull.rebase`).
+reconcile the divergent branches with `--rebase` or `--no-rebase` (or
+the corresponding configuration option in `pull.rebase`).
 
 More precisely, `git pull` runs `git fetch` with the given parameters
 and then depending on configuration options or command line flags,
-will call either `git merge` or `git rebase` to reconcile diverging
+will call either `git rebase` or `git merge` to reconcile diverging
 branches.
 
 <repository> should be the name of a remote repository as
@@ -136,7 +135,7 @@ published that history already.  Do *not* use this option
 unless you have read linkgit:git-rebase[1] carefully.
 
 --no-rebase::
-	Override earlier --rebase.
+	This is shorthand for --rebase=false.
 
 Options related to fetching
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index eb0aabd396f..907327bf759 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -2,6 +2,9 @@
 --no-commit::
 	Perform the merge and commit the result. This option can
 	be used to override --no-commit.
+ifdef::git-pull[]
+	Only useful when merging.
+endif::git-pull[]
 +
 With --no-commit perform the merge and stop just before creating
 a merge commit, to give the user a chance to inspect and further
@@ -39,6 +42,7 @@ set to `no` at the beginning of them.
 	to `MERGE_MSG` before being passed on to the commit machinery in the
 	case of a merge conflict.
 
+ifdef::git-merge[]
 --ff::
 --no-ff::
 --ff-only::
@@ -47,6 +51,22 @@ set to `no` at the beginning of them.
 	default unless merging an annotated (and possibly signed) tag
 	that is not stored in its natural place in the `refs/tags/`
 	hierarchy, in which case `--no-ff` is assumed.
+endif::git-merge[]
+ifdef::git-pull[]
+--ff-only::
+	Only update to the new history if there is no divergent local
+	history.  This is the default when no method for reconciling
+	divergent histories is provided (via the --rebase=* flags).
+
+--ff::
+--no-ff::
+	When merging rather than rebasing, specifies how a merge is
+	handled when the merged-in history is already a descendant of
+	the current history.  If merging is requested, `--ff` is the
+	default unless merging an annotated (and possibly signed) tag
+	that is not stored in its natural place in the `refs/tags/`
+	hierarchy, in which case `--no-ff` is assumed.
+endif::git-pull[]
 +
 With `--ff`, when possible resolve the merge as a fast-forward (only
 update the branch pointer to match the merged branch; do not create a
@@ -55,9 +75,11 @@ descendant of the current history), create a merge commit.
 +
 With `--no-ff`, create a merge commit in all cases, even when the merge
 could instead be resolved as a fast-forward.
+ifdef::git-merge[]
 +
 With `--ff-only`, resolve the merge as a fast-forward when possible.
 When not possible, refuse to merge and exit with a non-zero status.
+endif::git-merge[]
 
 -S[<keyid>]::
 --gpg-sign[=<keyid>]::
@@ -73,6 +95,9 @@ When not possible, refuse to merge and exit with a non-zero status.
 	In addition to branch names, populate the log message with
 	one-line descriptions from at most <n> actual commits that are being
 	merged. See also linkgit:git-fmt-merge-msg[1].
+ifdef::git-pull[]
+	Only useful when merging.
+endif::git-pull[]
 +
 With --no-log do not list one-line descriptions from the
 actual commits being merged.
@@ -102,10 +127,17 @@ With --no-squash perform the merge and commit the result. This
 option can be used to override --squash.
 +
 With --squash, --commit is not allowed, and will fail.
+ifdef::git-pull[]
++
+Only useful when merging.
+endif::git-pull[]
 
 --no-verify::
 	This option bypasses the pre-merge and commit-msg hooks.
 	See also linkgit:githooks[5].
+ifdef::git-pull[]
+	Only useful when merging.
+endif::git-pull[]
 
 -s <strategy>::
 --strategy=<strategy>::
@@ -127,6 +159,10 @@ With --squash, --commit is not allowed, and will fail.
 	default trust model, this means the signing key has been signed by
 	a trusted key.  If the tip commit of the side branch is not signed
 	with a valid key, the merge is aborted.
+ifdef::git-pull[]
++
+Only useful when merging.
+endif::git-pull[]
 
 --summary::
 --no-summary::
@@ -166,3 +202,7 @@ endif::git-pull[]
 	projects that started their lives independently. As that is
 	a very rare occasion, no configuration variable to enable
 	this by default exists and will not be added.
+ifdef::git-pull[]
++
+Only useful when merging.
+endif::git-pull[]
diff --git a/builtin/pull.c b/builtin/pull.c
index 94464ca196f..a15d4154093 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -893,6 +893,8 @@ static int run_rebase(const struct object_id *newbase,
 	strvec_pushv(&args, opt_strategy_opts.v);
 	if (opt_gpg_sign)
 		strvec_push(&args, opt_gpg_sign);
+	if (opt_signoff)
+		strvec_push(&args, opt_signoff);
 	if (opt_autostash == 0)
 		strvec_push(&args, "--no-autostash");
 	else if (opt_autostash == 1)
-- 
gitgitgadget
Previous: Elijah Newren via GitGitGadgetNext: Elijah Newren via GitGitGadget
Message 41 of 59 in “Handle pull option precedence”
  1. 0/9 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 17, 2021
  2. 2/9 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 17, 2021
  3. Felipe ContrerasJul 17, 2021
  4. Junio C HamanoJul 20, 2021
  5. Elijah NewrenJul 21, 2021
  6. 1/9 t7601: add relative precedence tests for merge and rebase flags/optionsElijah Newren via GitGitGadget, Jul 17, 2021
  7. Felipe ContrerasJul 17, 2021
  8. Junio C HamanoJul 19, 2021
  9. Elijah NewrenJul 20, 2021
  10. Junio C HamanoJul 20, 2021
  11. Felipe ContrerasJul 20, 2021
  12. 3/9 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 17, 2021
  13. Felipe ContrerasJul 17, 2021
  14. 4/9 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 17, 2021
  15. Felipe ContrerasJul 17, 2021
  16. 5/9 pull: ensure --rebase overrides ability to ffElijah Newren via GitGitGadget, Jul 17, 2021
  17. Felipe ContrerasJul 17, 2021
  18. Junio C HamanoJul 20, 2021
  19. Elijah NewrenJul 21, 2021
  20. 6/9 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 17, 2021
  21. Felipe ContrerasJul 17, 2021
  22. Junio C HamanoJul 20, 2021
  23. Felipe ContrerasJul 21, 2021
  24. 8/9 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 17, 2021
  25. Junio C HamanoJul 21, 2021
  26. Elijah NewrenJul 21, 2021
  27. Junio C HamanoJul 21, 2021
  28. 7/9 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 17, 2021
  29. Felipe ContrerasJul 17, 2021
  30. 9/9 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 17, 2021
  31. Felipe ContrerasJul 17, 2021
  32. 0/8 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 21, 2021
  33. 3/8 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 21, 2021
  34. Felipe ContrerasJul 21, 2021
  35. 1/8 t7601: test interaction of merge/rebase/fast-forward flags and optionsElijah Newren via GitGitGadget, Jul 21, 2021
  36. Felipe ContrerasJul 21, 2021
  37. 2/8 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 21, 2021
  38. 5/8 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 21, 2021
  39. Felipe ContrerasJul 21, 2021
  40. 8/8 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 21, 2021
  41. 7/8 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 21, 2021
  42. 6/8 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 21, 2021
  43. Felipe ContrerasJul 21, 2021
  44. 4/8 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 21, 2021
  45. Matthias BaumgartenJul 21, 2021
  46. Felipe ContrerasJul 21, 2021
  47. Junio C HamanoJul 21, 2021
  48. Elijah NewrenJul 22, 2021
  49. Felipe ContrerasJul 21, 2021
  50. 0/8 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 22, 2021
  51. 1/8 t7601: test interaction of merge/rebase/fast-forward flags and optionsElijah Newren via GitGitGadget, Jul 22, 2021
  52. 2/8 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 22, 2021
  53. 3/8 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 22, 2021
  54. 5/8 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 22, 2021
  55. 4/8 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 22, 2021
  56. 6/8 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 22, 2021
  57. 8/8 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 22, 2021
  58. 7/8 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 22, 2021
  59. Felipe ContrerasJul 22, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.