如何将某些提交移动到git中的另一个分支?

情况:

  • 主人在X;
  • quickfix1在X + 2提交

然后,我开始在quickfix2上工作,但意外地把quickfix1作为源分支来复制,而不是主人。 现在quickfix2在X + 2提交+2相关的提交。

现在我想要有一个quickfix2的分支,但没有属于quickfix1的两个提交。

我试图从quickfix2中的某个版本创build一个补丁,但补丁不保存提交历史logging。 有没有办法来保存我的提交历史,但有一个分支没有在quickfix1的变化?

这是rebase --onto的经典案例 –

  # let's go to current master (X, where quickfix2 should begin) git checkout master # replay every commit *after* quickfix1 up to quickfix2 HEAD. git rebase --onto master quickfix1 quickfix2 

所以你应该离开

 ooX (master HEAD) \ q1a--q1b (quickfix1 HEAD) \ q2a--q2b (quickfix2 HEAD) 

至:

  q2a'--q2b' (new quickfix2 HEAD) / ooX (master HEAD) \ q1a--q1b (quickfix1 HEAD) 

这最好在干净的工作树上完成。
请参阅git config --global rebase.autostash true ,特别是在Git 2.10之后 。

你可以使用git cherry-pick来select你想复制的提交。

可能最好的方法是创build分支出主,然后在该分支使用git cherry-pick quickfix2 2提交你想要的。

你可以做的最简单的事情是樱桃采摘范围。 它和rebase --onto但更容易理解:)

 git cherry-pick quickfix1..quickfix2 

我相信这是:

 git checkout master git checkout -b good_quickfix2 git cherry-pick quickfix2^ git cherry-pick quickfix2 

唯一的工作方式,我发现:

 git show>~/some_file.txt git checkout master git checkout -b new_branch git apply -stat ~/some_file.txt git apply -check ~/some_file.txt git apply ~/some_file.txt 

然后,您需要再次提交更改,但手动操作要容易得多。