如何在Git中的分支之间移动提交?

问题描述:

我敢肯定,这是一个简单的问题,已被问及答案,但我不知道要搜索什么条款。我有这样的:如何在Git中的分支之间移动提交?

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

当我在一个分支COMMITED C,d,和E(仅限本地),但后来我意识到,d和E是C的真正独立我想搬到C到自己的分支,并保留D和E以备后用。也就是说,我想要:

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

如何从D和E下拉出C?

您可以使用git cherry-pick抢C,并把它放在Y.假设Ÿ存在作为顶端的分支称为branch-Y

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

所以现在C是Y.但d和E也顶仍然包含C(樱桃采摘不移动提交,它只是它的副本)。你必须重订d和E对B.假设电子商务顶部的branch-E尖端和B是branch-B,您可以:

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

这将打开一个互动变基会话。只需完全删除提交C,并保持D和E完好无损。然后,您将在D和E之上重新设置B而不是C.

+4

请注意,从7.7.1开始,“cherry-pick”可以选择多个提交,因此您可以使用它来“多拉”更多比一个承诺。你也可以通过在E上创建一个临时分支并交互地将它重新绑定到Y上,只保留你想要的提交,然后将它合并(它将是一个快进)到Y的分支中。 (这总是奏效,而且可能更容易,所以你不必粘贴尽可能多的SHA1。) – Cascabel 2010-09-14 16:31:18