How to move certain commits to be based on another branch in git?
情况:
- 大师在X
- QuickFix1处于x+2提交状态
这样:
1 2 3 | o-o-X (master HEAD) \ q1a--q1b (quickfix1 HEAD) |
然后我开始使用QuickFix2,但意外地将QuickFix1作为源分支进行复制,而不是主分支。现在QuickFix2位于x+2提交+2相关提交。
1 2 3 4 5 | o-o-X (master HEAD) \ q1a--q1b (quickfix1 HEAD) \ q2a--q2b (quickfix2 HEAD) |
号
现在,我想使用QuickFix2创建一个分支,但是不使用属于QuickFix1的2个提交。
1 2 3 4 5 | q2a'--q2b' (quickfix2 HEAD) / o-o-X (master HEAD) \ q1a--q1b (quickfix1 HEAD) |
我试图从QuickFix2中的某个修订版创建修补程序,但该修补程序不保留提交历史记录。有没有一种方法可以保存我的提交历史记录,但是在QuickFix1中有一个没有更改的分支?
这是
1 2 3 4 5 | # 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 |
所以你应该从
1 2 3 4 5 | o-o-X (master HEAD) \ q1a--q1b (quickfix1 HEAD) \ q2a--q2b (quickfix2 HEAD) |
号
到:
1 2 3 4 5 | q2a'--q2b' (new quickfix2 HEAD) / o-o-X (master HEAD) \ q1a--q1b (quickfix1 HEAD) |
最好在干净的工作树上进行。见
您可以使用
也许最好的方法是从master创建分支,然后在该分支中,在您想要的QuickFix2的2提交上使用
你能做的最简单的事就是挑选一个范围。它和
1 | git cherry-pick quickfix1..quickfix2 |
我相信是:
1 2 3 4 | git checkout master git checkout -b good_quickfix2 git cherry-pick quickfix2^ git cherry-pick quickfix2 |
。
我发现唯一的工作方式是:
1 2 3 4 5 6 | 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 |
。
然后您需要再次提交更改,但比手动提交要容易得多…