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.