在进行其他几次提交后,如何将一个提交分离到一个分支中?

发布于 2024-10-03 03:43:06 字数 161 浏览 8 评论 0原文

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

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

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

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

我该怎么做?

I have a Git repo with the following structure:

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

I’d like to separate the C commit into a branch:

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

How do I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坚持沉默 2024-10-10 03:43:06
git branch new-branch C

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

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

will create a new branch pointing to C named new-branch, ending up with this:

    new-branch     HEAD
          |         |
A -> B -> C -> D -> E
穿越时光隧道 2024-10-10 03:43:06

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

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''

The correct answer is to honour the fact that D has 2 parents in the output that you want. I'm going to assume E is being pointed to by 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

you will end up with this:

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

this will preserve C as a parent in a merge into the main branch. You could squash D into Y with git rebase -i head^^^. You would then have:

     C
    / \
A--B---D''--E''
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文