A
,在其中进行了一些更改 a
,然后我从 A
创建了一个新的分支 B
,继续进行一些更改 b
,使得 B
中的总更改为 a、b
。最后,其他人将他们的更改 c
合并到主分支中,因此工作树现在看起来像这样:- c (master)
\
- a (A) - b (B)
然后,我将A
rebase到主分支,修改了从a
到a'
的更改,并强制推送到分支A
,因此工作树看起来像这样:
- c (master) - a' (A)
\
- a - b (B)
问题
如何将B
变基到A
,以便只更改新的变化b
,然后使工作树看起来像这样:
- c (master) - a' (A) - b' (B)
如果我在分支
B
上尝试执行git rebase origin/A
,那么它会尝试将提交a
与c, a'
合并,这不是我想要的,因为我担心它会创建新的提交a''
,然后工作目录会变成这样:- c (master) - a' (A) - a'' - b' (B)
有没有办法只对变更b进行变基?(我已经尝试过搜索,但是没有找到具体涵盖此情况的结果)
编辑:我尝试在B上压缩和,但结果更糟,因为现在所有来自的更改都被注册为冲突。例如,假设我:
1. 在中添加了一行<1l>。 2. 在中将该行更改为<1l>。 3. 另一个提交中未更改此行。 4. 现在它是个冲突,因为<1l>在中添加,但<1l>在压缩的提交中添加。
git rebase --onto A a B
中,我应该将a
设置为什么?我尝试使用提交哈希的开头,但效果不佳。不幸的是,我无法记起问题出在哪里(尝试了5+个方法,每个都以不同的方式失败)。 - kajacxgit rebase --onto A a
是我需要的(当在B
上检出时似乎与git rebase --onto A a B
相同)。我仍然不记得第一次为什么失败了(也许我粘贴了错误的提交哈希值)。 - kajacx