Hi! I've improved the usability of the script, thinking about two different use cases: - Moving a single branch. - Moving a tree of branches. For that, I've implemented --abort/--continue/--quit options, which are similar to the options in git-rebase(1), but different in that they act on the bisect-rebase operation, and not on a single rebase. The --continue flag is useful for the case of rebasing a single tree, not having to specify the target and flags each time. The --quit flag is useful to maintain the ability to terminate the bisect-rebase at the current point, having advanced the branch by some distance. This allows changing to other branches (descendants) that will be moved together with the parent, to minimize conflict resolution. I wrote in a different subthread the algorithms that would be used for each of these two cases, but I'll paste them again here: So, the usual algorithm for moving a tree would be (assuming A is a branch with two descendants, B and C): $ git bisect-rebase master A; $ git rebase --abort; $ git bisect-rebase --quit; $ git bisect-rebase A B; ## ... until success $ git bisect-rebase A C; ## ... until success $ git tag tmpA; $ git bisect-rebase master A; ## resolve conflicts here $ git rebase --continue; $ git bisect-rebase --quit; $ git rebase --onto A tmpA B; $ git rebase --onto A tmpA C; $ git tag -d tmpA; ## ... rinse and repeat (goto first command, until no conflicts) And the algorithm for moving a single branch would be simpler: $ git bisect-rebase master X; ## resolve conflicts here $ git rebase --continue; $ git bisect-rebase --continue; ## ... rinse and repeat (goto first command, until no conflicts) The script has been split into 3 smaller scripts. They are all attached, but can be also found in the Linux man-pages repository (alongside their history, which might clarify some design decisions): Of course, the entry point is git-bisect-rebase, with the other two being internal helpers. Have a lovely night! Alex --