On Fri, Jan 13, 2023 at 12:17 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Elijah Newren <newren@xxxxxxxxx> writes: > > > Of course, the same applies to edit/squash/fixup/reword, though if I > > could go back in time...(warning, long tangent coming)...I would make > > it so those four directives did not accept any commit ID argument. > > Only "pick" and "reset" would accept a commit ID. Instead, today's > > "edit X" would be two commands ("pick X" followed by either "break" or > > "edit"), "fixup X" would be "pick X" + "fixup", and "reword X" would > > be "pick X" + "reword". That'd help users understand rebase state > > much better (it's so easy for users to get confused by whether they > > should be using `git commit --amend` vs. `git rebase --continue` and I > > think this is partially to blame, though there's other changes we > > could make to help with that dichotomy as well). The separate > > directives would also make it much easier to figure out how to both > > fixup and edit a single commit in the same rebase (pick the commit, > > then add a fixup directive, then an edit directive). > > Intriguing, and I feel sad that it probably is too late for all of > the above X-<. Yeah, I know. One more thing for the "if we had a time machine" list... > > In fact, "squash > > X" could just be discarded as superfluous, since it's just "pick X" + > > "fixup" + "reword" (or we could keep squash as an abbreviation for > > both "fixup" + "reword"). > > IIUC, your "fixup" is > > git reset --soft HEAD^ > git commit --amend --no-edit > > i.e. discard the log message from "fixup" and use only its tree, and > your "reword" is > > git commit --amend --edit > > so "pick X" + "fixup" + "reword" would not be quite usable as a > replacement of our "squash X" (or your "pick X" + "squash"), I am > afraid. You'd want the log message from "X" as well as "X^" to > edit the replacement of X^. Oh, good point. So, in that alternate world we'd still need a squash directive.