On 20/02/18 11:44, Johannes Schindelin wrote: > > Hi Hilco, > > On Tue, 20 Feb 2018, Johannes Schindelin wrote: > >> When I am particularly tired and overworked (and therefore know that my >> working memory is less useful than usual), I therefore resort to my >> second-favorite strategy: U use the `done` file. >> >> I literally copy parts of $GIT_DIR/rebase-merge/done to the beginning of >> $GIT_DIR/rebase-merge/git-rebase-todo (the most convenient way to open the >> latter is `git rebase --edit-todo`). In your case, those would be the >> `pick` lines cherry-picking D and E. Then, as before, `git reset --hard >> <commit>` (where I look up the `<commit>` using an aliased version of `git >> log --graph --oneline --left-right --boundary`), amend the commit, and >> then `git rebase --continue`. >> >> It might be even possible to design a new subcommand for the interactive >> rebase to facilitate a variation of this strategy (possibly even making >> use of the fact that the interactive rebase accumulates mappings between >> the original commits and the rewritten ones in >> $GIT_DIR/rebase-merge/rewritten-list, intended for use in the post-rewrite >> hook). > > This feature might look somewhat like this: > > git rebase --replay-latest-commits 3 > > and it would not even have to look at the `rewritten-list`. All it would > do is to put back the latest `pick` from the `done` file (in case of merge > conflicts) into the `git-rebase-todo` file, then insert `pick lines for > HEAD~3.. at the beginning of that todo file, and then `git reset --hard > HEAD~3`. > > By not using the original lines from the `done` file (i.e. *different* > from what I described as my second-favorite strategy), you would also get > the resolved merge conflicts rather than having to re-resolve them.
Yes that's why I prefer using pasting the output of git log rather than bits of rebase-merge/done into the todo list when rewinding manually. > > (This all would of course only work properly without --preserve-merges and > without the upcoming --recreate-merges.) It shouldn't be too hard to support --recreate-merges in the case where you don't go past a merge commit, one would just have to check refs/rewritten to see if any label commands need to be inserted. Best Wishes Phillip > Ciao, > Johannes >