Git rebase subtree

后端 未结 3 540
面向向阳花
面向向阳花 2020-12-06 03:03

Suppose I have the following scenario:

    o (master)   
   /       o--o (WIP1)
  /       /
 o--o--o--o--o--o (WIP2)
(X)       \\
           o--o (WIP3)
         


        
3条回答
  •  孤城傲影
    2020-12-06 03:21

    There is no single git command for that. You will have to do some manual work. In your situation:

        o (master)   
       /        o--o (WIP1)
      /        /
     X--o--o--B--o--o (WIP2)
               \
                o--o (WIP3)
    

    You first rebase WIP1 onto master:

    git rebase --onto master X WIP1
    

    which will lead to this:

                   o--o (WIP1)
     (master)     /
        o--o--o--B’
       /   
      /        
     X--o--o--B--o--o (WIP2)
               \
                o--o (WIP3)
    

    If you now run git rebase --onto master X WIP2, you get this structure:

                    o--o (WIP1)
     (master)      /
         o--o--o--B’
        / \
       /   o--o--B’’--o--o (WIP2)
      /        
     X--o--o--B--o--o (WIP3)
    

    This is probably not what you want, so now you should rebase WIP2 and WIP3 on B’:

    git rebase --onto B’ B WIP2 
    git rebase --onto B’ B WIP3 
    

    which will lead to this:

                      o--o (WIP1)
    (master)         /
        o--X--o--o--B’--o--o (WIP2)
                     \
                      o--o (WIP3)
    

提交回复
热议问题