I like to keep all in-flight commits in a single local branch, so I can test them in combination and update them easily. git-branchstack allows me to send select commits upstream as pull requests (for projects that don't accept patches). By never touching the worktree, it avoids invalidating builds. See https://github.com/krobelus/git-branchstack To implement this I needed a way to reword (change the commit message) and reparent commits. I used the "rebase" function from [git revise](https://git-revise.readthedocs.io/). Unlike "git merge-tree" this can change commit messages, and allows me to resolve conflicts using a temporary file. I didn't find another easy way to do this (without touching my worktree/index). Is there a plumbing command I can use to create a copy of a commit, but with a different commit message? I wonder if there are more use cases for creating/updating commits that are not on the current branch. Future "git rebase -i" should only update worktree files when needed (see the "TODO:" comments in sequencer.c). Rewording never needs that, so it could, in theory, work on branches that are not checked out, though that would complicate the rebase UI even more.