我有以下存储库布局:
主分支(生产)集成工作
我想实现的是从工作分支中挑选一系列提交,并将其合并到集成分支中。我对git很陌生,我无法弄清楚如何在不破坏存储库的情况下准确地做到这一点(在一次操作中挑选提交范围,而不是合并)。对此有什么建议或想法吗?谢谢
我有以下存储库布局:
主分支(生产)集成工作
我想实现的是从工作分支中挑选一系列提交,并将其合并到集成分支中。我对git很陌生,我无法弄清楚如何在不破坏存储库的情况下准确地做到这一点(在一次操作中挑选提交范围,而不是合并)。对此有什么建议或想法吗?谢谢
当前回答
git cherry pick start_commit_sha_id ^。。结束委托sha_id
例如git cherry pick 3a7322ac。。7d7c123c型
假设您在branchA上,希望从branchB选择提交(给定范围的开始和结束提交SHA,左侧提交SHA较旧)。整个提交范围(包括两个)将在branchA中进行精心挑选。
官方文件中给出的示例非常有用。
其他回答
另一种选择可能是将我们的策略合并到范围之前的提交,然后与该范围的最后一次提交(或当它是最后一次时的分支)进行“正常”合并。因此,假设只有2345和3456个主提交要合并到功能分支中:
master: 1234 2345 3456 4567
在功能分支中:
git merge -s ours 4567 git merge 2345
先摘樱桃。。LAST仅适用于简单场景。
为了实现一个体面的“将其合并到集成分支中”,同时对自动跳过已集成的拾取、移植钻石合并、交互控制等事情感到舒适……)最好使用重基。这里的一个答案指出了这一点,然而协议包括一个危险的git分支-f和一个临时分支。这里有一个简单的稳健方法:
git rebase -i FIRST LAST~0 --onto integration
git rebase @ integration
-i允许交互控制。如果LAST是分支名称,~0可确保分离的重基(不移动/另一个分支)。否则可以省略。第二个rebase命令只是以安全的方式将集成分支ref向前移动到中间分离的头部-它不会引入新的提交。要使用合并菱形等对复杂结构进行重基化,请考虑第一个重基中的--rebase merges或--rebase convers=rebase cousins。
如果你只有两次提交,并且想挑选,你可以
git cherry-pick <commit> -n
然后将它们转换为新的提交。
-n不会自动创建提交,而只是阶段性地进行更改,因此您可以继续对提交中的文件进行cherry pick或更改。
假设您有2个分支,
“branchA”:包括要复制的提交(从“commitA”到“commitB”
“branchB”:要从“branchA”转移提交的分支
1)
git checkout <branchA>
2) 获取“commitA”和“commitB”的ID
3)
git checkout <branchB>
4)
git cherry-pick <commitA>^..<commitB>
5) 如果您有冲突,请解决并键入
git cherry-pick --continue
继续樱桃采摘过程。
合并有时会很困难,只需创建一个补丁并手动应用更改即可。
创建从start_commit到end_commit的修补程序文件。git diff<start_commit><end_commit>>patch.diff签出分支并手动应用修补程序中的更改。