On Thu, Jun 13, 2019 at 06:43:41PM +0100, Phillip Wood wrote: > >> (2) make the sequencer machinery more careful to clean up after it > >> is done or it is aborted (for example, "git reset --hard" > >> could remove these state files preemptively even when a rebase > >> is not in progress, I would think). > >> > >> I think we already had some patches toward the latter recently. > > > > Maybe I am not understanding it correctly, but do you mean in (2) that > > "git reset --hard" would always clear sequencer state? > > I think the commit Junio is referring to is > b07d9bfd17 ("commit/reset: try to clean up sequencer state", 2019-04-16) > which will only remove the sequencer directory if it stops after the > pick was the last one in the series. The idea is that if cherry-pick > stops for a conflict resolution on the last pick user commits the result > directly or run reset without running `cherry-pick --continue` > afterwards the sequencer state gets cleaned up properly. OK, that makes a lot more sense to me. It did make me wonder if doing an "e"dit on the final commit of a rebase followed by "reset HEAD^" would clear the sequencer state. But looking at that commit, this kicks in only for the cherry-pick and revert cases. Thanks for explaining. > If we do want to do something then maybe teaching gc not to collect > commits listed in .git/sequencer/todo and > .git/rebase-merge/git-rebase-todo would be useful. IMHO that opens up a can of worms, because the reachability rules get more complicated (so for example people trying to prune away unwanted history get confused about what is still mentioning the objects). That's a reasonable rare case. OTOH, so is mentioning commits in an ongoing rebase that are not still reachable from the branch you are rebasing, nor the HEAD reflog. -Peff