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

Re: [PATCH v2 11/11] rebase: dereference tags

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Sep 14, 2021, 10:17 UTC
Message-ID
<5ef402a4-3477-6227-e08c-041ed373313e@gmail.com>
In-Reply-To
<xmqq5yv4ccc0.fsf@gitster.g>
Hi Junio
On 13/09/2021 23:58, Junio C Hamano wrote:
Show 9 quoted lines
> "Phillip Wood via GitGitGadget" <gitgitgadget@gmail.com> writes:
> 
>> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>>
>> Aborting a rebase stated with 'git rebase <upstream> <tag-object>'
>> should checkout the commit pointed to by <tag-object>. Instead it gives
> 
> I am not sure if "should checkout the commit pointed to by." is a
> good description.  It does not seem to be sufficiently justified.

My logic was that as we handle commits here it would make sense to handle tags as well - I discovered that this did not work when I happened to use an annotated tag as the <branch> argument to rebase the commits pointed to by the tag and was surprised it did not work when we happily accept tags for <upstream> and --onto.

> Did we auto-peel in scripted version of "git rebase" and is this a
> regression when the command was rewritten in C?
As far as I can tell we have never peeled tags here
Show 23 quoted lines
> If that is not the case, this topic is perhaps slightly below
> borderline "meh" to me.  The optional "first switch to this <branch>
> before doing anything" command-line argument in
> 
>      git rebase [--onto <there>] <upstream> [<branch>]
> 
> was meant to give a branch, and because we treat detached HEAD as
> almost first-class citizen when dealing with branch-ish things, we
> allowed
> 
> 	git rebase master my-topic^0
> 
> to try rebasing my-topic on detached HEAD without losing the
> original.  In other words, you had to be explicit that you meant the
> commit object, not a ref that points at it, to trigger this "rebase
> detached" feature.  The same thing for tags.
> 
> 	git rebase master v12.3^0
> 
> would be a proper request to rebase the history leading to that
> commit.  Without the peeling, it appears the user is asking to
> update the ref that can be uniquely identified with "v12.3", but we
> do not want to rebase a tag.

I wrote this patch as I felt it was an artificial distinction to require that <branch> is a branch-ish thing rather than a commit-ish thing. Rebase already peels <upstream> and --onto so it feels inconsistent not to do it for <branch>. I guess the counter argument to that is users may be confused and start complaining that the tag itself is not rebased.

> It would have been a different story if we had a problem when a tag
> is given to "--onto <there>", but I do not think this topic is about
> that case.

No "--onto <tag>" works fine. We also accept a tag object for upstream without requiring the user to peel it for us.

Show 12 quoted lines
> Having said that, even if we decide that we shouldn't accept the tag
> object and require peeled form to avoid mistakes (instead of
> silently peeling the tag ourselves), I do agree that
> 
>>      error: update_ref failed for ref 'HEAD': cannot update ref 'HEAD': trying to write non-commit object       710d743b2b9892457fdcc3970f397e6ec07447e0 to branch 'HEAD'
>>
> 
> is a bad error message for this.  It should be something like
> 
> 	error: cannot rebase a tag
> 
> perhaps.

We could do that if we're worried that users would be confused by the tag not being rebased if we started automatically peeling <branch>. (I'm kind of leaning in that direction at the moment having read your email)

Best Wishes
Phillip
Show 8 quoted lines
> But if we auto-peeled in an old version, I do not mind this series
> (but let's drop pointless "clean-up" that is not, like what was
> pointed out by Réne).  In such a case, the first paragraph should
> say, instead of "should checkout", that "we used to do X, but commit
> Y broke us and now we die with an error message".
> 
> Thanks.
> 
Previous: Junio C HamanoNext: Phillip Wood
Message 36 of 55 in “rebase: dereference tags”
  1. 00/11 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 8, 2021
  2. 01/11 t3407: run tests in $TEST_DIRECTORYPhillip Wood via GitGitGadget, Sep 8, 2021
  3. Ævar Arnfjörð BjarmasonSep 8, 2021
  4. 02/11 t3407: use test_commitPhillip Wood via GitGitGadget, Sep 8, 2021
  5. Ævar Arnfjörð BjarmasonSep 8, 2021
  6. 03/11 t3407: use test_cmp_revPhillip Wood via GitGitGadget, Sep 8, 2021
  7. Ævar Arnfjörð BjarmasonSep 8, 2021
  8. Phillip WoodSep 8, 2021
  9. 04/11 t3407: rename a variablePhillip Wood via GitGitGadget, Sep 8, 2021
  10. 06/11 t3407: strengthen rebase --abort testsPhillip Wood via GitGitGadget, Sep 8, 2021
  11. Ævar Arnfjörð BjarmasonSep 8, 2021
  12. 05/11 t3407: use test_path_is_missingPhillip Wood via GitGitGadget, Sep 8, 2021
  13. 07/11 t3407: rework rebase --quit testsPhillip Wood via GitGitGadget, Sep 8, 2021
  14. 08/11 rebase: remove redundant strbufPhillip Wood via GitGitGadget, Sep 8, 2021
  15. Johannes SchindelinSep 9, 2021
  16. 09/11 rebase: use our standard error return valuePhillip Wood via GitGitGadget, Sep 8, 2021
  17. 11/11 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 8, 2021
  18. Ævar Arnfjörð BjarmasonSep 8, 2021
  19. 10/11 rebase: use lookup_commit_reference_by_name()Phillip Wood via GitGitGadget, Sep 8, 2021
  20. 00/11 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 13, 2021
  21. 01/11 t3407: run tests in $TEST_DIRECTORYPhillip Wood via GitGitGadget, Sep 13, 2021
  22. 02/11 t3407: use test_commitPhillip Wood via GitGitGadget, Sep 13, 2021
  23. 03/11 t3407: use test_cmp_revPhillip Wood via GitGitGadget, Sep 13, 2021
  24. 04/11 t3407: rename a variablePhillip Wood via GitGitGadget, Sep 13, 2021
  25. 05/11 t3407: use test_path_is_missingPhillip Wood via GitGitGadget, Sep 13, 2021
  26. 06/11 t3407: strengthen rebase --abort testsPhillip Wood via GitGitGadget, Sep 13, 2021
  27. 07/11 t3407: rework rebase --quit testsPhillip Wood via GitGitGadget, Sep 13, 2021
  28. 08/11 rebase: remove redundant strbufPhillip Wood via GitGitGadget, Sep 13, 2021
  29. René ScharfeSep 13, 2021
  30. Junio C HamanoSep 13, 2021
  31. Phillip WoodSep 14, 2021
  32. Phillip WoodSep 14, 2021
  33. 09/11 rebase: use our standard error return valuePhillip Wood via GitGitGadget, Sep 13, 2021
  34. 11/11 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 13, 2021
  35. Junio C HamanoSep 13, 2021
  36. Phillip WoodSep 14, 2021
  37. Phillip WoodSep 14, 2021
  38. Junio C HamanoSep 14, 2021
  39. Elijah NewrenSep 14, 2021
  40. Sergey OrganovSep 14, 2021
  41. Phillip WoodSep 14, 2021
  42. 10/11 rebase: use lookup_commit_reference_by_name()Phillip Wood via GitGitGadget, Sep 13, 2021
  43. Elijah NewrenSep 14, 2021
  44. 00/10 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 21, 2021
  45. 01/10 t3407: run tests in $TEST_DIRECTORYPhillip Wood via GitGitGadget, Sep 21, 2021
  46. 02/10 t3407: use test_commitPhillip Wood via GitGitGadget, Sep 21, 2021
  47. 03/10 t3407: use test_cmp_revPhillip Wood via GitGitGadget, Sep 21, 2021
  48. 04/10 t3407: rename a variablePhillip Wood via GitGitGadget, Sep 21, 2021
  49. 05/10 t3407: use test_path_is_missingPhillip Wood via GitGitGadget, Sep 21, 2021
  50. 06/10 t3407: strengthen rebase --abort testsPhillip Wood via GitGitGadget, Sep 21, 2021
  51. 07/10 t3407: rework rebase --quit testsPhillip Wood via GitGitGadget, Sep 21, 2021
  52. 08/10 rebase: use our standard error return valuePhillip Wood via GitGitGadget, Sep 21, 2021
  53. 09/10 rebase: use lookup_commit_reference_by_name()Phillip Wood via GitGitGadget, Sep 21, 2021
  54. 10/10 rebase: dereference tagsPhillip Wood via GitGitGadget, Sep 21, 2021
  55. Elijah NewrenSep 24, 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.