From: Chris Webb Date: Wed, 20 Jun 2012 19:35:14 GMT Subject: Re: Editing the root commit Message-ID: <20120620193513.GA3192@arachsys.com> In-Reply-To: <7vy5nhvo0z.fsf@alter.siamese.dyndns.org> Junio C Hamano writes: > What if we do not say --onto here? I am not asking what the current > implementation does (we get an error message saying "I want 'onto' > specified"). What _should_ this command mean to a na??ve user? > > $ git rebase [-i] --root > > I think it should mean "replay all my history down to root". The > original root commit should become the new root commit in the > rewritten history. Yes, I definitely agree with everything you say here. That's exactly what I'd expect from git rebase --root without --onto, and what I'd hope to be able to implement in a patch series. > For the root commit in the history, you check it out on the detached > HEAD. Under "--interactive" if the insn sheet tells you to allow > the user to "edit/amend/reword" it, give control back the user after > you have detached HEAD at that commit. The user experience should > be identical to the case you are replaying on an existing commit > after that point. I think it might a little more complicated than detecting when we have to do a commit --amend on the root commit though? The user might have reordered the first commit (introducing A and B, say) with the second commit (introducing C and D), or dropped the original root commit entirely. My understanding of the way --interactive works at the moment is that it checks out the starting commit (whether given explicitly by --onto or taken from ) and then 'plays out' the commits as described in the instruction sheet. I could re-use this unchanged if I could do a git checkout --orphan without having to create a new branch, but I don't think this is allowed: I can have a detached head or make an orphan checkout onto a new branch, but not both at the same time? Would you prefer that I create a temporary branch just to be able to git checkout --orphan onto it here, or that I add support for this kind of 'detached HEAD with no parent' state, or is there a natural way to rework --interactive without needing to do this which I'm missing? Best wishes, Chris.