Hi Junio & Victor, On Thu, 3 Sep 2020, Junio C Hamano wrote: > Victor Toni <victor.toni@xxxxxxxxx> writes: > > > When doing a commit or choosing what to do for an interactive rebase > > one can just wipe the whole content of the editor, save and close to > > abort the action. > > While doing a `git rebase --edit-todo` I came to the conclusion that I > > would like to abort the edit and did the same. The final `git rebase > > --continue` got me rid of the rest of the commits... > > (Fortunately the "missing" commits could be rescued by looking into > > `.git/logs/HEAD` so thumbs up for that. ) > > Unfortunately the behaviour of `--edit-todo` was a bit surprising and > > somehow doesn't feel consistent with the other actions involving an > > editor. > > > > Can this be considered a bug? > > It is rather unusual (or almost always wrong) to have a totally > empty commit log or initial todo list, so it is understandable for > Git in these situations to stop without doing anything further. > > There is no other sensible interpretations of what you are telling > Git to you by returning an empty buffer---it is extremely unlikely > you want to create a commit with no log message (without explicitly > allowing it with --allow-empty-message, the command is likely to > fail anyway), and it is extremely unlikely that you wanted to just > reset the tip of the branch to the --onto commit. > > Once an interactive rebase session has started and you are given the > remainder of the steps to edit and you give an empty buffer back, > however, there are two possible interpretations that are equally > sensible, I would think. > > - One is that you are signaling that you are done with the rebase > session and all the remaining commits are to be discarded. > > - The other is that you botched editing the todo list, and you wish > Git to give you another chance to edit it again. > > I think the implementor chose the first interpretation. The "drop" > insn is a relatively recent invention, and back when it was missing > from the vocabulary, I do not think it was possible to say " discard > all the rest" without emptying the todo list, so that design is > understandable. > > Now we have the "drop" verb, the latter interpretation becomes > possible without making it impossible for the user to express the > former. It might be a good idea to > > (1) save away the original before allowing --edit-todo to edit, > > (2) open the editor, and > > (3) when getting an empty buffer back, go back to step (2) using > the back-up made in step (1). > > Either way, the todo list editor buffer can have additional comment > instructing what happens when the buffer is emptied. > > I have no strong opinion on this one myself. Deferring to Dscho, > who may have a lot more to say on the design issue around this > feature than I do. First of all, some historical background: the idea that deleting everything in the todo list aborts the rebase *predates* `git rebase --edit-todo` by quite a bit, in fact, that idea was implemented in either the very first version of `git rebase -i` or at least very, very short thereafter. This idea came from the fact that deleting the commit message would abort a `git commit`. In the meantime, `--edit-todo` is a thing (where this behavior makes a lot less sense), and `drop` is also a thing. I agree that it may be a good time to deprecate that behavior, after introducing a new verb `abort` or something like that. Ciao, Dscho