Re: Gerrit, GitButler, and Jujutsu projects collaborating on change-id commit footer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 3 Apr 2025 at 15:13, Nico Williams <nico@xxxxxxxxxxxxxxxx> wrote:
>
> On Thu, Apr 03, 2025 at 03:05:41PM -0700, Martin von Zweigbergk wrote:
> > On Thu, 3 Apr 2025 at 11:10, Nico Williams <nico@xxxxxxxxxxxxxxxx> wrote:
> > >
> > > I agree that `git rebase main <change ID>; git switch <change ID>` is
> > > not a good UI, and I wouldn't want it even though I want change IDs.
> >
> > Why do you think it's not a good UI? Is it because the change ID isn't
> > meaningful? That's correct, but they are also very convenient. The
> > unique prefix is usually two letters or so, depending on how many
> > "local" commits you have in your repo. That makes them easy to type. I
> > basically never refer to a commit by a branch name anymore.
>
> What would `git rebase main <change ID>` do?  I assumed that it would
> find a commit `<change ID>` in the current branch and rebase it onto the
> main branch.  That seems workable, I suppose.  It would be akin to
> `git cherry-pick --from $branch --change-id $change_id`.

I think part of the problem is that I didn't consider that Git doesn't
really like to work in detached HEAD mode and doesn't automatically
update refs pointing to rewritten commits. This does take away a lot
of the usefulness, unfortunately. It would still be a bit useful as an
argument to readonly commands.

> What would `git switch <change ID>` do?  `git switch` switches between
> branches, but a change ID can't possibly identify a branch since many
> commits could exist with the same change ID all in different branches.

Yes, the same change id *can* exist on many branches, but it's pretty
uncommon. It might happen after cherry-picking, depending on what we
decide there, but it should very rarely happen in other cases. When
you rewrite a commit, the old commit usually becomes unreachable, so
if your change id resolved to one commit before the rewrite, then it
will resolve to one commit after the rewrite. I know Git often leaves
descendant branches until you manually rebase them, but at least
that's probably typically a pretty short-lived state. I had a script
for this back when I used Git.

> > > > And if it does work, isn't it expensive since you'd need to walk
> > > > history to find it?  Or do you keep an extra lookup table on the side
> > > > somewhere?
> > >
> > > Worse: since there can be many commits with the same change ID they
> > > can't be used as refs because Git can't possibly be expected to find
> > > _the one_ you really intend -- how could it?  I suppose Git could let
> > > you pick from a list, but that's not likely going to have enough
> > > context.  Maybe Git could give you a list of named branches in which it
> > > found some change ID's commits to pick one branch from, or maybe one
> > > could `git cherry-pick --from $some_branch $cid` and have Git find the
> > > commit(s) on `$some_branch` that match change ID `$cid`.
> >
> > See my reply to Elijah. There's usually just one visible commit with a
> > given change id a repo.
>
> s/a repo/in a repo/ ?
> s/a repo/in a branch/ ?

The former.

> I'd expect many commits with the same change ID in a _repo_, but at most
> one in a _branch_.

There may be multiple commits with the same change ID in a repo if you
had cherry-picked the commit, depending on what we decide to do with
the change ID on cherry-pick. But cherry-picks are not very common
anyway. Or maybe it's common in some workflow? Oh, are you thinking of
a scenario where you cherry-pick your own commit to see if an
alternative approach is better? Sure, if cherry-pick preserve the
change ID, then you would have multiple commits with the same change
ID in that case.




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux