I frequently use "fixup!", "squash!" and "rebase -i" to clean up, correct, or just fiddle with recent, unpushed history. I'd like to find a way to get Git to automatically choose which commit makes the most sense for interactive rebasing, so that I could define an alias to do a quick interactive rebase.
I think the best commit in such cases would be the most recent ancestor to either:
So it's not pretty, but this is what I've come up with.
#! /bin/sh commit=$(git rev-parse HEAD) while [ "$(git log --format="%p" -1 $commit | wc -w)" -eq 1 ] \ && [ "$(git branch --all --contains $commit | wc -l)" -eq 1 ] do commit=$(git rev-parse "$commit^") done echo $commit
I'm sure there's a simpler, more robust way of accomplishing this, but it seems to do what I want. Suggestions and improvements are very much welcome. (It'd be nice to do this with just Git plumbing instead of relying on
wc, for example.)