我的历史记录如下:
o---o---o---o 主分支
\
o---o---o A分支
\
o B分支
那么,来解释一下:
- 我有一个从
主分支
开始的分支A
- 我有一个从
A
开始的只有一个提交的分支B
我想要的是这样:
o---o---o---o 主分支
\
o---o---o A分支
\
o B分支
我所做的是:
1).
git checkout A
git rebase master
这导致了大量的冲突,花费了很多时间来解决,最终出现了以下历史记录:
o---o---o---o 主分支
\
o---o---o A分支
这正是我想要的。
(我不知道现在的 B
在哪里)
2).
之后我进行了许多合并操作,并改变了 A
中提交的顺序,以获得我想要的历史记录。
3).
现在,我想要做的是:
git checkout B
git rebase A
但这似乎不起作用,我不知道为什么。如果我运行 git log
命令,我会看到在第一步之前存在的提交。
此外,我会遇到相同数量的冲突,这些冲突已经在第一步中解决了。我花费了大量的时间来解决它,不想再重复一遍。
这个例子 建议使用 --onto
参数,我也这样做了:
git checkout B
git rebase --onto A HEAD~1 B
我的问题是:如何有效地将B重新定义为基于A开始,就像在最初一样?我的猜测是我错误地使用了--onto选项。或者我应该使用类似cherry-pick的其他选项。
git rebase --onto A B~ B
完美地工作了。现在我只需要弄清楚为什么 :) :D - Radu MurzeaB~
只有在B
只有一个提交时才起作用——在这里,它确实只有一个提交。我喜欢把语法看作是git rebase --onto <new base> <old base> <head>
;<old base>
表示<head>
当前分支的位置,<new base>
则是你希望它分支出的位置。 - Sam