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

Re: [BUG] rebase no longer omits local commits

From
John Keeping <john@keeping.me.uk>
Date
Jul 3, 2014, 22:25 UTC
Message-ID
<20140703222501.GF13153@serenity.lan>
In-Reply-To
<20140703190917.GE13153@serenity.lan>
On Thu, Jul 03, 2014 at 08:09:17PM +0100, John Keeping wrote:
Show 15 quoted lines
> On Thu, Jul 03, 2014 at 11:14:26AM -0400, Ted Felix wrote:
> > Starting with git 1.9.0, rebase no longer omits local commits that 
> > appear in both the upstream and local branches.
> 
> It is the problem that bb3f458 fixes.  The change in behaviour is
> actually introduced by ad8261d (rebase: use reflog to find common base
> with upstream).
> 
> In your example, I think this is working as designed.  You can restore
> the previous behaviour either with `git rebase --no-fork-point` or with
> `git rebase @{u}`.
> 
> The change is designed to help users recover from an upstream rebase, as
> described in the "DISCUSSION ON FORK-POINT MODE" section of
> git-merge-base(1).

Having thought about this a bit more, I think the case you've identified is an unexpected side effect of that commit.

Perhaps we shuld do something like this (which passes the test suite):
-- >8 --
diff --git a/git-rebase.sh b/git-rebase.sh
index 06c810b..0c6c5d3 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -544,7 +544,8 @@ if test "$fork_point" = t
 then
 	new_upstream=$(git merge-base --fork-point "$upstream_name" \
 			"${switch_to:-HEAD}")
-	if test -n "$new_upstream"
+	if test -n "$new_upstream" &&
+	   ! git merge-base --is-ancestor "$new_upstream" "$upstream_name"
 	then
 		upstream=$new_upstream
 	fi
-- 8< --

Since the intent of `--fork-point` is to find the best starting point
for the "$upstream...$orig_head" range, if the fork point is behind the
new location of the upstream then should we leave the upstream as it
was?

I haven't thought through this completely, but it seems like we should
be doing a check like the above, at least when we're in
"$fork_point=auto" mode.
Previous: John KeepingNext: Junio C Hamano
Message 3 of 15 in “[BUG] rebase no longer omits local commits”
  1. Ted FelixJul 3, 2014
  2. John KeepingJul 3, 2014
  3. John KeepingJul 3, 2014
  4. Junio C HamanoJul 7, 2014
  5. John KeepingJul 7, 2014
  6. 1/2 rebase--am: use --cherry-pick instead of --ignore-if-in-upstreamJohn Keeping, Jul 15, 2014
  7. 2/2 rebase: omit patch-identical commits with --fork-pointJohn Keeping, Jul 15, 2014
  8. Ted FelixJul 15, 2014
  9. Junio C HamanoJul 15, 2014
  10. 1/2 rebase--am: use --cherry-pick instead of --ignore-if-in-upstreamJohn Keeping, Jul 16, 2014
  11. 2/2 rebase: omit patch-identical commits with --fork-pointJohn Keeping, Jul 16, 2014
  12. Junio C HamanoJul 16, 2014
  13. John KeepingJul 16, 2014
  14. Ted FelixJul 16, 2014
  15. John KeepingJul 17, 2014

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.