将本地提交复制到另一个分支

3

我正在阅读关于rebase的文件。Rebase的含义是“将本地提交前移至更新的上游头”。好的,...有可能将本地提交复制到更新的上游吗?

以下是起点:

           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个回答

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

    Rebase all commits from next (exclusive) to topic (inclusive) onto topic2

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

注意: 如果您已经将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>

2

只需创建一个新分支并将其重新基于当前分支。

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

谢谢,我接受了另一个答案,因为它更完整。非常感谢。 - sensorario

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

谢谢您,但问题并不要求逐个移动提交。 - sensorario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接