COPY本地承诺到另一个分支

时间:2015-11-25 10:58:47

标签: git rebase

我正在阅读rebase文档。 Rebase“转发端口本地提交到更新的上游头”。好的,......可以copy本地提交更新上游吗?

这是起点:

           o---o---o---o---o  master
                \
                 o---o---o---o---o  next
                                  \
                                   o---o---o  topic

这是我用rebase获得的东西:

           o---o---o---o---o  master
               |            \
               |             o'--o'--o'  topic
                \
                 o---o---o---o---o  next

这就是我想要的:

           o---o---o---o---o  master
               |            \
               |             o'--o'--o'  new topic
                \
                 o---o---o---o---o  next
                                  \
                                   o---o---o  topic

没有理由:我只是在问是否可能。

3 个答案:

答案 0 :(得分:3)

  1. git checkout -b topic2 master

    o---o---o---o---o  master / topic2
                \
                 o---o---o---o---o  next
                                  \
                                   o---o---o  topic
    
  2. git rebase --onto topic2 next topic

    将所有提交从next(不包括)转到主题(包括)到topic2

     o---o---o---o---o  master
           |            \
           |             o'--o'--o'  topic2
            \
             o---o---o---o---o  next
                              \
                               o---o---o  topic
    
  3. PS:如果您已经重新定位了topic分支

           o---o---o---o---o  master
               |            \
               |             o'--o'--o'  topic
                \
                 o---o---o---o---o  next
    

    旧的'承诺没有消失。查看git reflog,然后您可以重新创建“旧版”'分支。

     git checkout -b old_topic <TOPIC_COMMIT_ID_BEFORE_REBASE>
    

答案 1 :(得分:2)

只需创建一个新分支并重新绑定该分支。

git checkout topic
git checkout -b new_topic
git rebase next new_topic --onto master

答案 2 :(得分:1)

除了rebase这是一个更复杂的工具之外,还有一个cherry-pick命令直接执行提交的副本。

首先在master上创建一个新分支并结帐。现在请注意/阅读/查看要复制的所有提交的哈希

           o---o---o---o---o  master / new-topic
               |           
               |           
                \
                 o---o---o---o---o  next
                                  \
                                   C---B---A  topic
                                   :   :   :
                                   :   :   ^ commit hash AAAAA
                                   :   ^ commit hash BBBBB
                                   ^ commit hash CCCCC

坐在new-topic分行,发出:

git cherry-pick CCCCC

           o---o---o---o---o  master
               |            \
               |             c'  new-topic
                \
                 o---o---o---o---o  next
                                  \
                                   C---B---A  topic

git cherry-pick BBBBB
git cherry-pick AAAAA

           o---o---o---o---o  master
               |            \
               |             c'---b'---a'  new-topic
                \
                 o---o---o---o---o  next
                                  \
                                   C---B---A  topic

您可以切换订单,使用--no-commit并在此期间修补它们等 - 就像在rebase --interactive期间一样,但是一步一步地手动操作。实际上,您可能会认为rebase类似于大规模自动化cherry-pick