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

Re: [Internet]Re: [PATCH] merge-tree.c: add --merge-base=<commit> option

From
kylezhao (赵柯宇) <kylezhao@tencent.com>
Date
Oct 28, 2022, 11:54 UTC
Message-ID
<b517c12bef6d45238b1f88f180b51011@tencent.com>
In-Reply-To
<CABPp-BGBFyoY7m+KCA9MTifKmpZ0ccLgsYHahMCgPxuTpuUGPg@mail.gmail.com>
> Note that this has been implemented previously.  I may have implemented it previously and ripped it out (about a year ago), or maybe I just avoided it once I ran across the reasons below.  Dscho also implemented it over at https://lore.kernel.org/git/nycvar.QRO.7.76.6.2202210956430.26495@tvgsbejvaqbjf.bet/
>
> You may want to take a look at his code for comparison, especially the
merge_incore_nonrecursive() stuff.
Thanks. I'll take a look later.
Show 13 quoted lines
> This capability is something we may ultimately want for completeness,
> but it definitely should not be marketed as a building block for
> implementing cherry-pick or rebase.  There are several reasons for
> that:
> 
> Performance reasons:
>  * it's a design with a separate fork for every commit to be picked,
> ....
> Maintenance reason:
>   * suggesting this code as a basis for cherry-pick or rebase is
> likely to lead to yet another shell-scripted rebase; we've been trying
> to generally nuke shell scripts from Git for a variety of reasons.
> It'd be sad to regress here.
Thank you for your very detailed explanation, I feel like I have a deeper understanding of rebase and cherry-pick.
> My apologies for having very limited git time (which is often entirely used up just in reviewing/responding to patches and other queries on the list instead of on new features like this, or maybe on making some nice slides for a conference); if I had more time, I think git-replay could have easily been done many months ago (or perhaps even last year).  Then you'd have the high level tool you need for server side cherry-picking and rebasing.  But, I haven't had much time.  So, it makes sense that folks might want to use an interim hack while waiting for the more robust tool to materialize.
git-replay sounds great, looking forward to it one day.
> Would it make sense to have o->merge_base be a struct commit *, and move this lookup/die logic out to the parsing logic in cmd_merge_tree()?
Done.
Show 6 quoted lines
> and the next line of code, not showing in the context here, is a call
> to merge_incore_recursive().  While that technically works, it doesn't
> make logical sense.  You're not doing a recursive merge when you have
> a specified merge base, so I think the code should instead call
> merge_incore_nonrecursive() in such a case (see Dscho's code for a
> comparison here).
Done. I've changed it to merge_incore_recursive(). It works,  but I don't know if it's written correctly, especially opt.ancestor.
> So, the O-A-B thing thing was taken from t6423; it appears I didn't copy the comment at the top of t6423 over to t4301 to explain this.
> Sorry about that.  Anyway, for these types of comments in these files, O is always the merge base of both A and B, and neither A nor B contain each other in their history.  From that basis, your description here makes no sense (A would be the tip of some branch, not the parent of anything).  I'd call your commits something else (maybe just C1, C2, and C3 or something?).
Done.
> Would test_commit be useful here, given that you aren't worried about
> the exact contents of files?
It's useful, which makes the test clearer.
Previous: Elijah NewrenNext: Kyle Zhao via GitGitGadget
Message 8 of 43 in “merge-tree.c: add --merge-base=<commit> option”
  1. merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Oct 27, 2022
  2. Junio C HamanoOct 27, 2022
  3. Elijah NewrenOct 28, 2022
  4. Junio C HamanoOct 28, 2022
  5. Elijah NewrenOct 29, 2022
  6. kylezhao (赵柯宇)Oct 28, 2022
  7. Elijah NewrenOct 28, 2022
  8. kylezhao (赵柯宇)Oct 28, 2022
  9. merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Oct 28, 2022
  10. Elijah NewrenOct 29, 2022
  11. merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Oct 29, 2022
  12. Elijah NewrenNov 1, 2022
  13. 0/2 merge-tree: allow specifying a base commit when --write-tree is passedKyle Zhao via GitGitGadget, Nov 1, 2022
  14. 2/2 merge-tree.c: support --merge-base in conjunction with --stdinKyle Zhao via GitGitGadget, Nov 1, 2022
  15. Elijah NewrenNov 3, 2022
  16. kylezhao (赵柯宇)Nov 3, 2022
  17. 1/2 merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Nov 1, 2022
  18. Taylor BlauNov 1, 2022
  19. 0/2 merge-tree: allow specifying a base commit when --write-tree is passedKyle Zhao via GitGitGadget, Nov 3, 2022
  20. 1/2 merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Nov 3, 2022
  21. Ævar Arnfjörð BjarmasonNov 3, 2022
  22. kylezhao (赵柯宇)Nov 3, 2022
  23. 2/2 merge-tree.c: allow specifying the merge-base when --stdin is passedKyle Zhao via GitGitGadget, Nov 3, 2022
  24. 0/2 merge-tree: allow specifying a base commit when --write-tree is passedKyle Zhao via GitGitGadget, Nov 3, 2022
  25. 1/2 merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Nov 3, 2022
  26. 2/2 merge-tree.c: allow specifying the merge-base when --stdin is passedKyle Zhao via GitGitGadget, Nov 3, 2022
  27. Elijah NewrenNov 11, 2022
  28. 0/2 merge-tree: allow specifying a base commit when --write-tree is passedKyle Zhao via GitGitGadget, Nov 11, 2022
  29. 1/2 merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Nov 11, 2022
  30. Junio C HamanoNov 22, 2022
  31. kylezhao (赵柯宇)Nov 22, 2022
  32. Junio C HamanoNov 22, 2022
  33. Junio C HamanoNov 22, 2022
  34. kylezhao (赵柯宇)Nov 22, 2022
  35. 2/2 merge-tree.c: allow specifying the merge-base when --stdin is passedKyle Zhao via GitGitGadget, Nov 11, 2022
  36. Elijah NewrenNov 12, 2022
  37. Taylor BlauNov 13, 2022
  38. Taylor BlauNov 13, 2022
  39. 0/3 merge-tree: allow specifying a base commit when --write-tree is passedKyle Zhao via GitGitGadget, Nov 24, 2022
  40. 1/3 merge-tree.c: add --merge-base=<commit> optionKyle Zhao via GitGitGadget, Nov 24, 2022
  41. 2/3 merge-tree.c: allow specifying the merge-base when --stdin is passedKyle Zhao via GitGitGadget, Nov 24, 2022
  42. 3/3 docs: fix description of the `--merge-base` optionKyle Zhao via GitGitGadget, Nov 24, 2022
  43. Junio C HamanoNov 25, 2022

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.