2010-09-14 138 views
30

我敢肯定,這是一個簡單的問題,已被問及答案,但我不知道要搜索什麼條款。我有這樣的:如何在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?

回答

42

您可以使用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

相關問題