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

Re: [PATCH v2] rebase --merge: optionally skip upstreamed commits

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 18, 2020, 18:47 UTC
Message-ID
<xmqqpnd9fql0.fsf@gitster.c.googlers.com>
In-Reply-To
<20200318173051.25875-1-jonathantanmy@google.com>
Jonathan Tan <jonathantanmy@google.com> writes:
Show 12 quoted lines
> When rebasing against an upstream that has had many commits since the
> original branch was created:
>
>  O -- O -- ... -- O -- O (upstream)
>   \
>    -- O (my-dev-branch)
>
> it must read the contents of every novel upstream commit, in addition to
> the tip of the upstream and the merge base, because "git rebase"
> attempts to exclude commits that are duplicates of upstream ones. This
> can be a significant performance hit, especially in a partial clone,
> wherein a read of an object may end up being a fetch.
OK.  I presume that we do this by comparing patch IDs?

Total disabling would of course is OK as a feature, especially for the first cut, but I wonder if it would be a reasonable idea to use some heuristic to keep the current "filter the same change" feature as much as possible but optimize it by filtering the novel upstream commits without hitting their trees and blobs (I am assuming that you at least are aware of and have the commit objects on the upstream side).

The most false-negative-prone approach is just to compare the <author ident, author timestamp> of a candidate upstream commit with what you have---if that author does not appear on my-dev-branch, it is very unlikely that your change has been accepted upstream. Of course, two people who independently discover the same solution is not all that rare, so it does risk false-negative to take too little clue from the commits to compare, but at least it is not worse than what you are proposing here ;-) And if one of your commits on my-dev-branch _might_ be identical to one of the novel upstream ones, at that point, we could dig deeper to actually compute the patch ID by fetching the upstream's tree.

That's all totally outside the scope of this patch. It is just a random thought to see if anybody wants to pursue to make the topic even better, possible after it lands.

> New in V2: changed parameter name, used Taylor's commit message
> suggestions, and used Elijah's documentation suggestions.

Hmph, what was it called earlier? My gut reaction without much thinking finds --no-skip-* a bit confusing double-negation and suspect "--[no-]detect-cherry-pick" (which defaults to true for backward compatibility) may feel more natural, but I suspect (I do not recall details of the discussion on v1) it has been already discussed and people found --no-skip-* is OK (in which case I won't object)?

I also wonder if --detect-cherry-pick=(yes|no|auto) may give a better end-user experience, with "auto" meaning "do run patch-ID based filtering, but if we know it will be expensive (e.g. the repository is sparsely cloned), please skip it". That way, there may appear other reasons that makes patch-ID computation expensive now or in the fiture, and the users are automatically covered.

Previous: Jonathan TanNext: Jonathan Tan
Message 13 of 36 in “rebase --merge: optionally skip upstreamed commits”
  1. rebase --merge: optionally skip upstreamed commitsJonathan Tan, Mar 9, 2020
  2. Taylor BlauMar 10, 2020
  3. Jonathan TanMar 10, 2020
  4. Johannes SchindelinMar 10, 2020
  5. Jonathan TanMar 10, 2020
  6. Elijah NewrenMar 10, 2020
  7. Jonathan TanMar 10, 2020
  8. Jonathan TanMar 12, 2020
  9. Elijah NewrenMar 12, 2020
  10. Elijah NewrenMar 14, 2020
  11. Jonathan TanMar 17, 2020
  12. rebase --merge: optionally skip upstreamed commitsJonathan Tan, Mar 18, 2020
  13. Junio C HamanoMar 18, 2020
  14. Jonathan TanMar 18, 2020
  15. Junio C HamanoMar 18, 2020
  16. Elijah NewrenMar 18, 2020
  17. Junio C HamanoMar 18, 2020
  18. Elijah NewrenMar 19, 2020
  19. Junio C HamanoMar 18, 2020
  20. Jonathan TanMar 26, 2020
  21. Elijah NewrenMar 26, 2020
  22. Junio C HamanoMar 26, 2020
  23. rebase --merge: optionally skip upstreamed commitsJonathan Tan, Mar 30, 2020
  24. Junio C HamanoMar 30, 2020
  25. Danh DoanMar 30, 2020
  26. Derrick StoleeMar 30, 2020
  27. Junio C HamanoMar 30, 2020
  28. Jonathan TanMar 30, 2020
  29. Derrick StoleeMar 31, 2020
  30. Elijah NewrenMar 31, 2020
  31. Junio C HamanoMar 31, 2020
  32. Junio C HamanoMar 31, 2020
  33. Jonathan TanApr 10, 2020
  34. Elijah NewrenApr 11, 2020
  35. Jonathan TanApr 11, 2020
  36. Elijah NewrenApr 11, 2020

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.