这句话的语境是:
master在X
quickfix1在X + 2次提交时
这样:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
然后我开始开发quickfix2,但意外地把quickfix1作为要复制的源分支,而不是主分支。现在quickfix2是X + 2个提交+ 2个相关提交。
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
现在我想要一个带有quickfix2的分支,但不包含属于quickfix1的2个提交。
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
我尝试从quickfix2中的某个修订中创建一个补丁,但补丁不保存提交历史。是否有一种方法可以保存我的提交历史,但在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
所以你应该从
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
to:
q2a'--q2b' (new quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
这最好在一个干净的工作树上完成。
参见git配置——global rebase。autostash为true,尤其是在Git 2.10之后。
这是一个典型的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
所以你应该从
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
to:
q2a'--q2b' (new quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
这最好在一个干净的工作树上完成。
参见git配置——global rebase。autostash为true,尤其是在Git 2.10之后。