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

[PATCH] Handle rebase fork-point options in pull --rebase

From
MBMr Bill <billc56196@gmail.com>
Date
May 14, 2025, 17:37 UTC
Message-ID
<06beff46-cdaf-91c8-e6a3-6557694af618@gmail.com>
This is a patch to handle --fork-point and --no-fork-point in pull --rebase.
I had a recent bug report about pull --rebase not working correctly...
but it was working correctly, but not doing what I expected due to always
using "merge-base --fork-point"
This patch implements handling the --fork-point and --no-fork-point options,
and also checks the config rebase.forkpoint value...
and it works to resolve my prior bug report issue.
If there are any questions or comments, let me know!
Thanks to all for the help and comments on my prior bug report!
-Bill
diff --git a/builtin/pull.c b/builtin/pull.c
index a1ebc6a..f2d405f 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -117,6 +117,10 @@ static int opt_show_forced_updates = -1;
  static const char *set_upstream;
  static struct strvec opt_fetch = STRVEC_INIT;

+/* options to include rebase fork-point preference */
+static int config_fork_point = -1;
+static int opt_fork_point = -1;
+
  static struct option pull_options[] = {
     /* Shared options */
     OPT__VERBOSITY(&opt_verbosity),
@@ -253,6 +257,10 @@ static struct option pull_options[] = {
         N_("set upstream for git pull/fetch"),
         PARSE_OPT_NOARG),

+   /* rebase option to use/not use merge-base --fork-point */
+   OPT_BOOL(0, "fork-point", &opt_fork_point,
+       N_("rebase with 'merge-base --fork-point' to refine upstream")),
+
     OPT_END()
  };

@@ -366,6 +374,9 @@ static int git_pull_config(const char *var, const 
char *value,
     if (!strcmp(var, "rebase.autostash")) {
         config_autostash = git_config_bool(var, value);
         return 0;
+   } else if (!strcmp(var, "rebase.forkpoint")) {
+       config_fork_point = git_config_bool(var, value) ? -1 : 0;
+       return 0;
     } else if (!strcmp(var, "submodule.recurse")) {
         recurse_submodules = git_config_bool(var, value) ?
             RECURSE_SUBMODULES_ON : RECURSE_SUBMODULES_OFF;
@@ -1059,7 +1070,17 @@ int cmd_pull(int argc,
                 N_("pull with rebase"),
                 _("Please commit or stash them."), 1, 0);

-       if (get_rebase_fork_point(&rebase_fork_point, repo, *refspecs))
+       if (opt_fork_point == -1)
+           opt_fork_point = config_fork_point;
+       if (opt_fork_point < 0)
+           opt_fork_point = 1;
+       fprintf_ln(stderr, _("rebasing %s fork-point"), (opt_fork_point 
? "with" : "without"));
+
+       /*
+        * If we're *not* using fork-point, or we don't find one in 
get_rebase_fork_point(),
+        * clear the rebase_fork_point info.
+        */
+       if (!opt_fork_point || get_rebase_fork_point(&rebase_fork_point, 
repo, *refspecs))
             oidclr(&rebase_fork_point, the_repository->hash_algo);
     }
Next: Junio C Hamano
Message 1 of 3 in “Handle rebase fork-point options in pull --rebase”
  1. Handle rebase fork-point options in pull --rebaseMr Bill, May 14, 2025
  2. Junio C HamanoMay 15, 2025
  3. Mr BillMay 16, 2025

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.