@ 5: F | | o 4: E |/| o | 3: D | | | o 2: C |/ | o 1: B |/ o 0: A % Rebasing % B onto F - simple rebase saved backup bundle to @ 5: B | o 4: F | | o 3: E |/| o | 2: D | | | o 1: C |/ o 0: A % B onto D - intermediate point saved backup bundle to @ 5: B | | o 4: F |/ | o 3: E |/| o | 2: D | | | o 1: C |/ o 0: A % C onto F - skip of E saved backup bundle to @ 4: C | o 3: F | o 2: D | | o 1: B |/ o 0: A % D onto C - rebase of a branching point (skip E) saved backup bundle to @ 4: F | o 3: D | o 2: C | | o 1: B |/ o 0: A % E onto F - merged revision having a parent in ancestors of target saved backup bundle to @ 5: E |\ | o 4: F | | | o 3: D | | o | 2: C |/ | o 1: B |/ o 0: A % D onto B - E maintains C as parent saved backup bundle to @ 5: F | | o 4: E |/| o | 3: D | | | o 2: C | | o | 1: B |/ o 0: A % These will fail (using --source) % E onto D - rebase onto an ancestor abort: source is descendant of destination % D onto E - rebase onto a descendant abort: source is ancestor of destination % E onto B - merge revision with both parents not in ancestors of target abort: cannot use revision 4 as base, result would have 3 parents % These will abort gracefully (using --base) % E onto E - rebase onto same changeset nothing to rebase % E onto D - rebase onto an ancestor nothing to rebase % D onto E - rebase onto a descendant nothing to rebase