【问题标题】:How do I separate a commit into a branch after doing several other commits?在进行其他几次提交后,如何将提交分离到一个分支中?
【发布时间】:2011-05-11 12:09:43
【问题描述】:

我有一个具有以下结构的 Git 存储库:

A--B--C--D--E

我想将 C 提交分离到一个分支中:

     C
    / \
A--B---D--E

我该怎么做?

【问题讨论】:

  • B---D 行可能是多余的——你没有重写任何提交,只是重命名。
  • 如果新分支要长期存在并与当前分支同步,则可能需要 B--D 行。取决于你想要什么。
  • @adymitruk 不,我的意思是 D 没有 B 作为父级,因此这两个图具有不同的历史。

标签: git merge branch rebase


【解决方案1】:
git branch new-branch C

将创建一个指向C 的新分支,命名为new-branch,最终如下:

    new-branch     HEAD
          |         |
A -> B -> C -> D -> E

【讨论】:

  • 没有生成问题中所需的图表。
【解决方案2】:

正确的答案是尊重 D 在您想要的输出中有 2 个父母这一事实。我将假设 E 被 master 指向。

git branch new-branch C
git checkout -b merge-base B
git merge --no-ff new-branch
git rebase --onto merge-base D^ master
git checkout master

你最终会得到这个:

     C
    / \
A--B---Y--D'--E'

这将在合并到主分支时保留 C 作为父级。您可以使用 git rebase -i head^^^ 将 D 压缩为 Y。然后你会有:

     C
    / \
A--B---D''--E''

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 2021-11-06
    • 1970-01-01
    • 2021-10-13
    • 2015-02-13
    • 2013-12-30
    • 1970-01-01
    • 2021-06-18
    • 2012-08-31
    相关资源
    最近更新 更多