git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Generating a todo file for non-interactive rebasing

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Apr 17, 2019, 16:11 UTC
Message-ID
<nycvar.QRO.7.76.6.1904171754060.46@tvgsbejvaqbjf.bet>
In-Reply-To
<20190416153709.GA19000@homura.localdomain>
Hi Drew,
On Tue, 16 Apr 2019, Drew DeVault wrote:
Show 18 quoted lines
> Whenever I do a particularly long rebase on a branch, sorting out
> conflicts from upstream, I find that it's often useful to have the
> additional context that you get during an interactive rebase, such as
> recent commands run, commands planned to run, and so on, to get a better
> idea of where I'm at during the rebase. These show when you run `git
> status` during an interactive rebase.
>
> However, the code that generates this report relies on a todo list being
> generated in the rebase state directory. A todo list which consists only
> of "pick" commands is functionally equivalent to a non-interactive
> rebase, the only difference being that the editor isn't shown to the
> user.
>
> Is there any reason not to refactor the rebase command to always
> generate a todo list? This would simplify the internals and provide more
> context to the user during hairy rebases. It might also be useful to run
> --edit-todo if you realize your rebase strategy needs to change partway
> through a rebase which was initially non-interactive.

The default mode of the rebase command is actually not based on picks, but internally generates mails, puts them into an mbox, and then pretends to apply those patches from a mailing list.

That mode is obviously very different from the interactive rebase, so there is not quite the simplification in store that you hoped for.

However, we recently changed the way the --merge backend works, and it is
now indeed backed by the same machinery as the interactive rebase.
Meaning: if you call `git rebase -m <options>...`, you have what you
wished for. This change is part of v2.21.0.

To my surprise, Elijah Newren (who authored that change) then demonstrated that in most cases, the `--merge` backend is actually *faster* than the default (`--am`) backend. There were patches floating around to make it the default rebase backend for that reason, but those patches were not picked up yet.

Short version: if you add `--merge` or `-m` to your `git rebase` invocations, you already get what you want.

Ciao, Johannes

Previous: Phillip WoodNext: Drew DeVault
Message 3 of 4 in “Generating a todo file for non-interactive rebasing”
  1. Drew DeVaultApr 16, 2019
  2. Phillip WoodApr 17, 2019
  3. Johannes SchindelinApr 17, 2019
  4. Drew DeVaultApr 17, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.