44

我确信这是一个简单的问题,已经被询问和回答,但我不知道要搜索什么术语。我有这个:

    /--master--X--Y
A--B
    \--C--D--E

我在一个分支上提交了 C、D 和 E(仅限本地),但后来我意识到 D 和 E 确实独立于 C。我想将 C 移动到它自己的分支,并保留 D 和 E 以备后用。也就是说,我想要这个:

                   /--C
    /--master--X--Y
A--B
    \--D--E

如何从 D 和 E 下拉出 C?

4

1 回答 1

63

您可以使用git cherry-pick抓取 C,并将其放在 Y 上。假设 Y 作为尖端存在一个名为 的分支branch-Y

$ git checkout branch-Y
$ git cherry-pick C

所以现在 C 在 Y 之上。但是 D 和 E 也仍然包含 C(樱桃采摘不会移动提交,它只是复制它)。您必须在 B 之上重新设置 D 和 E。假设 E 是尖端,branch-EB 是branch-B,您可以:

$ git checkout branch-E
$ git rebase --interactive branch-B

这将打开一个交互式变基会话。只需完全删除提交 C,并保持 D 和 E 不变。然后,您将在没有 C 的情况下在 B 之上重新设置 D 和 E。

于 2010-09-14T15:24:47.863 回答