# The Universe of Discourse

Thu, 13 Aug 2015

On Tuesday I discussed an interesting solution to the problem of turning this:

  no X              X on

A --------------- C


into this:

  no X     X off    X on

A ------ B ------ C


Dave Du Cros has suggested an alternative solution: Make the changes required to turn off feature X, and commit them as B, as in my solution:

  no X     X on     X off

A ------ C ------ B


Then use git-revert to revert the changes, making a new C commit in the right place:

  no X     X on     X off     X on

A ------ C ------ B ------ C'


C' and C have identical trees.

Then use git-rebase to squash together C and B:

  no X              X off     X on

A --------------- B ------ C'


This has the benefit of not requiring anything strange. I think my solution is more general, but it's also weird, and it's not clear that the increased generality is useful.

However, what if there were a git-reorder-commits command? Then my solution would seem much less weird. It would look like this: create B, as before, and do:

    git reorder-commits 0 1


This last command would mean that the previous two commits, normally HEAD~1 and HEAD~0, should switch places. This might be a useful standard tool. Or similarly to turn

    B -- 3 -- 2 -- 1 -- 0


into

    B -- 2 -- 0 -- 3 -- 1


one would use

    git reorder-commits 2 0 3 1


I think git-reorder-commits would be easy to implement, as a loop atop git-commit-tree, as in the previous article.