Initial state: ============== A - B - C - D - E - F - G - H master \ \ I - J - K - L branchA \ \ M - N - O branchB After git checkout branchB; git rebase branchA (or git rebase branchA branchB): ============================================== A - B - C - D - E - F - G - H master \ \ I - J - K - L branchA \ \ M' - N' - O' branchB After git checkout branchB; git rebase master (or git rebase master branchB): ============================================= A - B - C - D - E - F - G - H master \ \ \ \ \ I' - J' - M' - N' - O' branchB \ I - J - K - L branchA After git checkout branchB; git rebase --onto master branchA (or git rebase --onto master branchA branchB) ============================================================ A - B - C - D - E - F - G - H master \ \ \ \ \ M' - N' - O' branchB \ I - J - K - L branchA