Re: rewinding interactive rebases

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

 



Hi Erik & Oswald,

it's not really obvious from the text quoted below what is being discussed
here, so let me simply top-post some thoughts:

Problem statement: in the middle of an interactive rebase, the user would
like to choose a different rebase target, without having to abort the
rebase.

Suggested approach: implement support for `git rebase -i --nested --onto
<commit> <base-commit>`, i.e. a `--nested` option.

The idea here is to generate a todo list (just like a fresh `git rebase -i
--onto <commit> <base-commit>` would have done) and _prepend_ it to the
current todo list.

To support a nested `git rebase --abort`, we would probably want to insert
some marker after the newly-generated todo list (maybe a
specially-formatted comment such as `## END NESTED ##`).

To support nested `git rebase --rebase-merges`, we would need to populate
`state.labels` by reading `$GIT_DIR/rebase-merge/refs-to-delete` first
thing when generating the todo list.

For good measure, we should probably populate `state.commit2label` with
this list, too, looking up the respective OIDs via
`refs/rewritten/<label>`.

I realize that this is quite dense information for anybody unfamiliar with
the `sequencer.c` code, and that the idea is _not_ fully fleshed out, but
I lack the time to implement it and wanted to get even just a
half-finished idea out there.

Ciao,
Johannes

On Tue, 1 Mar 2022, Erik Cervin Edin wrote:

> On Tue, Mar 1, 2022 at 1:21 AM Oswald Buddenhagen
> <oswald.buddenhagen@xxxxxx> wrote:
>
> > On Mon, Feb 28, 2022 at 10:32:16PM +0100, Erik Cervin Edin wrote:
> > >What's the connection to the original thread [...]?
> > >
> > that depends on what you want to interpret into the original thread,
> > given that a bunch of use cases and solutions were mentioned. my
> > solution is actually functionally identical to one of the later
> > subthreads, as i found after the fact.
>
> Sorry but it's a long thread and at least I am unsure which parts you
> are referring to and how your script fits into that.
>
> > >Maybe you could explain it a bit in the context of the problem.
> > >
> > there really isn't much to it. the git log + git reset are the essence.
> > just run it in the middle of an interactive rebase to see yourself.
>
> Could you elaborate on the intended/usual flow here?
> Rebase => Get conflict => Fix conflict => run the script => ..??
>




[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