![](/img/trans.png)
[英]How do I successfully rebase a branch onto a (github) squashed commit containing the commits it was branched off of?
[英]How to rebase a branch that's been branched off at different points
我有一个名为 release 的分支,它是前一段时间从 master 分支出来的。 现在,我有两个分支,一个基于 master,称为 basedMaster,另一个基于 release,称为 basedRelease。 我最近对 master 进行了大约 10 次以上的更改。 我知道您可以cherry-pick
那些提交,但我想找出一种方法来将这 10 多个提交变基到 basedRelease 分支。 我假设来自 basedMaster 的那些提交只有 10+ 正是我想要的。 我尝试rebasing
,但它也会获取其他开发人员的提交,这不是我想要的。 因此,我从 basedMaster 找到了另一个名为 basedMasterLocal 的分支,认为它只会携带我对该分支 basedRelease 所做的 10 次提交。 但是,我一直无法弄清楚如何执行此操作,因为我不想使用cherry-pick
并且想使用rebase
来解决这个问题
让我们把它画出来。
我有一个名为 release 的分支,它是前一段时间从 master 分支出来的。
A - B - C - F - G [master]
\
D - E [release]
现在,我有两个分支,一个基于 master,称为 basedMaster,另一个基于 release,称为 basedRelease。
我假设您已经在这些分支上添加了一些提交,否则它们是无关紧要的。
H - I [basedMaster]
/
A - B - C - F - G [master]
\
D - E [release]
\
J - K [basedRelease]
我最近对 master 进行了大约 10 次以上的更改。
让我们做那两个。
H - I [basedMaster]
/
A - B - C - F - G - L - M [master]
\
D - E [release]
\
J - K [basedRelease]
然后我从 basedMaster 采购了另一个分支,叫做 basedMasterLocal
[basedMasterLocal]
H - I [basedMaster]
/
A - B - C - F - G - L - M [master]
\
D - E [release]
\
J - K [basedRelease]
有了这个,我们对存储库的 state 有了更好的了解。
我想找出一种方法来将这 10 多个提交变基到 basedRelease 分支。
目前尚不清楚您是否想要 master 中但不在basedRelease
中的所有提交,或者只是您提到的那些 10 多个提交。 并且不清楚您是要复制它们 ( cherry-pick
) 还是移动它们 ( rebase
)。
我一直无法弄清楚如何执行此操作,因为我不想使用 cherry-pick 并且想使用 rebase 来解决这个问题。
无论哪种方式,您都可以挑选多个提交。 这将需要一系列的提交。 我们可以使用..
其中x..y
表示“所有可从 y 到达的提交,不包括可从 x 到达的提交”。 有关更多信息,请参见gitrevisions/Specifying Ranges 。
假设您已basedRelease
...如果您想复制(挑选) master
中的所有提交而不是basedRelease
中的所有提交。
# All the commits reachable from master
# excluding those reachable from HEAD (the currently checked out commit).
git cherry-pick HEAD..master
如果只是那 10 次以上的提交,您可以拼出这 10 次提交。 在这个例子中只有两个,L 和 M。
git cherry-pick L M
或者您可以观察到这些是在master
但不在basedMaster
中的提交。
git cherry-pick basedMaster..master
如果你想移动(变基)它们。
git rebase --onto basedRelease basedMaster..master
git-cherry-pick examples中有类似的示例, git-rebase 在其 description 中也有类似的示例。
这种在长期存在的分支之间进行的复杂交换提交是我建议不要拥有多个长期存在的分支,并且绝对反对从它们中分离出分支的原因之一。 让它们保持同步变得非常复杂。
相反,我建议使用一个长期存在的分支: master
。 没有任何内容直接提交给master
。 所有工作都在短暂的功能分支上完成。 他们必须在合并到master
之前通过 QA。 一旦合并,它们将被删除。 这样master
总是稳定的,随时可以发布。 使用标签跟踪发布。 这是功能分支工作流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.