如何选择一系列提交并合并到另一个分支?

如何选择一系列提交并合并到另一个分支?

我有以下存储库布局:

  • 总支部(生产)
  • 整合
  • 工作

我想要实现的是从工作分支中选择一系列提交,并将其合并到集成分支中。我对git非常陌生,我不知道如何做到这一点(在一个操作中选择提交范围,而不是合并),而不是在不破坏存储库的情况下。对此有什么建议或想法吗?谢谢!


饮歌长啸
浏览 936回答 3
3回答

隔江千里

A rebase --onto如果在集成分支的顶部重放给定的提交范围,将更好,如查尔斯·贝利.(此外,请查找“这里是如何基于一个分支将主题分支移植到另一个分支”的git重基手册页的实际例子git rebase --onto)如果您当前的分支是集成的,那么:# Checkout a new temporary branch at the current locationgit checkout -b tmp# Move the integration branch to the head of the new patchsetgit  branch -f integration last_SHA-1_of_working_branch_range# Rebase the patchset onto tmp, the old location of integrationgit rebase --onto   tmp first_SHA-1_of_working_branch_range~1 integration它将在以下几个方面重播所有内容:在父母之后first_SHA-1_of_working_branch_range(因此~1):你想要重播的第一次提交直至“integration“(指向要重播的最后一次提交,从working支部)致“tmp“(指的是integration指过去)如果其中一次提交被重播时有任何冲突:要么解决它,然后运行“git rebase --continue".或者跳过此修补程序,而是运行“git rebase --skip"或者用“git rebase --abort“(然后放回integration支线tmp支部)在那之后rebase --onto, integration将返回到集成分支的最后一次提交(即“tmp“分支+所有重放提交)摘樱桃或者rebase --onto,不要忘记它对随后的合并有影响,如在此描述.纯“cherry-pick“并涉及以下内容:如果您想使用修补程序的方法,那么“git格式-修补程序\git是”和“git樱桃”是您的选择。目前,git cherry-pick只接受一次提交,但如果要选择范围B贯通D那就是B^..D用吉特林戈语,所以git rev-list --reverse --topo-order B^..D | while read rev  do    git cherry-pick $rev || break done但是无论如何,当您需要“重放”一系列提交时,“重播”一词应该促使您使用rebase“Git的特征。

跃然一笑

从git v1.7.2樱桃采摘可以接受一系列提交:git cherry-pick学会选择一系列的提交(例如:cherry-pick A..B和cherry-pick --stdin),也是git revert这些不支持更好的测序控制。rebase [-i]尽管如此。

芜湖不芜

你确定你不想真正合并这些分支吗?如果工作分支有一些您不想要的最近提交,您可以创建一个新的分支,在您想要的点上有一个头。现在,如果您确实想要选择一系列提交,不管出于什么原因,一个优雅的方法就是只需拉动一个修补程序集并将其应用于您的新集成分支:git format-patch A..B git checkout integration git am *.patch这基本上就是git-rebase到底在做什么,但不需要玩游戏。你可以添加--3way到git-am如果你需要合并的话。请确保在执行此操作的目录中已经没有其他*.修补程序文件,如果您按照说明逐字操作.
打开App,查看更多内容
随时随地看视频慕课网APP