Skip to content
  • Greg Price's avatar
    Fix rebase -p --onto · 1830d9cb
    Greg Price authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    In a rebase with --onto, the correct test for whether we can skip
    rewriting a commit is if it is already on top of $ONTO, not $UPSTREAM.
    Without --onto, this distinction does not exist and the behavior does
    not change.
    
    In a situation with two merged branches on a common base X:
    
     X---o---o---o---M
      \             /
       x---x---x---x
    
     Y
    
    if we try to move the branches from their base on X to be based on Y,
    so as to get
    
     X
    
     Y---o'--o'--o'--M'
      \             /
       x'--x'--x'--x'
    
    then we fail.  The command `git rebase -p --onto Y X M` moves only the
    first-parent chain, like so:
    
     X
      \
       x---x---x---x
                    \
     Y---o'--o'--o'--M'
    
    because it mistakenly drops the other branch(es) x---x---x---x from
    the TODO file.  This tests and fixes this behavior.
    
    Signed-off-by: default avatarGreg Price <price@ksplice.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    1830d9cb