Subject: Re: Feature request: rebase -i inside of rebase -i

From: George Spelvin <[email-masked]>
Date: Mon, 30 Mar 2020 18:18:12 +0000

On Mon, Mar 30, 2020 at 03:01:28PM +0100, Philip Oakley wrote:
> Perhaps we can go the other way on this one.
> 
> I'd agree that attempting to nest (misunderstood mistaken) rebases is
> digging a too deep hole that we'd not get out of. However we do have
> other rebases available, specifically the "rebasing merges"
> https://git-scm.com/docs/git-rebase#_rebasing_merges.
> 
> I know rebasing merges is way down the man page, but it has all the
> power and flexibility needed _if_ we can step across from the mistaken
> rebase step (we are at the command prompt aren't we?) into the rebasing
> merge mode.
> 
> This will require a little bit of expansion of the insn (instruction)
> sheet so as to _include commented lines of the rebase steps completed_
> so far, along with the labels, resets, merges, etc, so that the user can
> _see_ where they they are within their failed progress (along with a
> title line telling them their initial command and that they are now on a
> rebasing merge insn;-).
> 
> From there they can update the insn to reset back to the correct point,
> redo the correct picks, and then get back to their remaining rebase steps.
> 
> It's a thought anyway.

I'm confused.  *How* does --rebase-merge mode help?  You're saying
"hey, if we use this, it solves the issue" but I don't see how to
pound this nail with that screwdriver.

I don't see how creating a branching history helps, and I don't see how to 
use the reset/label/merge commands to do anything but create a branching 
history.

I suppose it is possible to use the "reset" command in isolation
to describe the jump to a new base.  So you could have a history of:

# Command already executed:
# reset base
# pick A
# pick B
# pick C
# label rebase-1  User asked for a nested rebase
# reset A'

# Commands pending:
pick B'
pick C'
# rebase-2 complete, resume rebase-1
pick D
pick E

Is that what you were getting at?

I was thinking of it being implicit, but it might be nice for the initial
"reset" in each rebase to be explicit, *and not yet executed during
the initial todo edit*.

That makes it really clear that deleting the todo list entirely
results in no change to the tree.