假设您的分支情况如下所示:
A---B feature2
/
o---o---o dev
\
C---D---E feature1
你想要的是rebase你在feature1中的工作在feature2之上:
A---B feature2
/
o---o---o dev
\
A'---B'---C'---D'---E' feature1
为此,您可以运行:
git rebase feature2 feature1
这基本上是说“checkout feature1 并将其重新定位在 feature2 之上”。当然,准备好解决您和feature2的作者修改的页面中不可避免地出现的冲突。
背景
你可能想知道为什么要变基?好吧,因为无论哪个分支首先合并到dev,它都会产生清晰的历史记录。
比如我们考虑feature2在feature1之前合并的场景:
A---B feature2
/ \
o---o---o---o dev
\
A'---B'---C'---D'---E' feature1
在这种情况下,一旦你在 dev 之上 rebase feature1,Git 将检测到提交 A 和 B 引入的更改已经在 dev 中,因此它将从 @ 中删除它们987654338@:
A---B feature2
/ \
o---o---o---o dev
\
C'---D'---E' feature1
如果feature1 在feature2 之前被重新定位会怎样:
A---B feature2
/
o---o---o-----------------------o dev
\ /
A'---B'---C'---D'---E' feature1
这里同样适用。一旦你在dev 之上重新设置feature2,A 和B 将从feature1 中删除,因为它们的更改已经存在于dev 中:
o---o---o---------------------o dev, feature2
\ /
A'---B'---C---D---E feature1
当然,如果在您将 feature1 重新设置为基础之后,在 feature2 中添加了新的提交,这些提交仍将保留:
F---G---H feature2
/
o---o---o---------------------o dev
\ /
A'---B'---C---D---E feature1