我有以下存储库布局:

主分支(生产)集成工作

我想实现的是从工作分支中挑选一系列提交,并将其合并到集成分支中。我对git很陌生,我无法弄清楚如何在不破坏存储库的情况下准确地做到这一点(在一次操作中挑选提交范围,而不是合并)。对此有什么建议或想法吗?谢谢


当前回答

合并有时会很困难,只需创建一个补丁并手动应用更改即可。

创建从start_commit到end_commit的修补程序文件。git diff<start_commit><end_commit>>patch.diff签出分支并手动应用修补程序中的更改。

其他回答

合并有时会很困难,只需创建一个补丁并手动应用更改即可。

创建从start_commit到end_commit的修补程序文件。git diff<start_commit><end_commit>>patch.diff签出分支并手动应用修补程序中的更改。

是否确实不想合并分支?如果工作分支有一些您不需要的最近提交,您可以在您需要的位置创建一个带有HEAD的新分支。

现在,如果出于任何原因,你真的想要挑选一系列提交,那么一个很好的方法就是只需提取一个补丁集并将其应用于新的集成分支:

git format-patch A..B
git checkout integration
git am *.patch

这基本上就是git rebase所做的,但不需要玩游戏。如果需要合并,可以向git-am添加--3way。如果您逐字遵循说明,请确保执行此操作的目录中没有其他*.patch文件。。。

几天前,在阅读了Vonc的非常清晰的解释后,我已经测试了这一点。

我的脚步

开始

分支机构名称:A B C D E F G H I J分支目标:A B C D我不想要E和H

复制分支dev_feature_wo_E_H中没有步骤E和H的要素的步骤

git结帐设备git checkout-b dev_feature_wo_E_Hgit rebase--交互式--rebase合并--没有ff D,我在rebase编辑器中将E和H放在前面解决冲突,继续并提交

在目标上复制分支dev_feature_wo_E_H的步骤。

git结帐目标git merge--无ff--无提交dev_feature_wo_E_H解决冲突,继续并提交

一些备注

我这么做是因为前几天摘了太多樱桃git cherry pick功能强大且简单,但它会创建重复的提交当我想合并时,我必须解决初始提交和重复提交之间的冲突,所以对于一个或两个樱桃选择,“樱桃选择”是可以的,但对于更多的,它太冗长,分支将变得太复杂

如果你只有两次提交,并且想挑选,你可以

git cherry-pick <commit> -n

然后将它们转换为新的提交。

-n不会自动创建提交,而只是阶段性地进行更改,因此您可以继续对提交中的文件进行cherry pick或更改。

git cherry pick start_commit_sha_id ^。。结束委托sha_id

例如git cherry pick 3a7322ac。。7d7c123c型

假设您在branchA上,希望从branchB选择提交(给定范围的开始和结束提交SHA,左侧提交SHA较旧)。整个提交范围(包括两个)将在branchA中进行精心挑选。

官方文件中给出的示例非常有用。