[英]Merge features in Git in another branch?
我们为功能使用分支,然后将它们合并到master
。 我们还为版本使用分支。 但是,我有一个特殊功能(合并到master
),需要进入版本分支。 以前,我一直在使用cherry-pick
来完成此操作(通常一次手动提取一次提交),但是此功能一次执行的提交太多。 有没有更好的办法?
此功能已合并到master
。 该分支不再在本地存在。 但是,我确实有将其合并到master
的提交。
我能够还原feature-branch
(因为我们使用GitHub)。 但是,从版本分支中,当我运行git merge feature-branch
,我得到了与该功能无关的各种冲突。 如果我执行git rebase feature-branch
(来自version-branch
),也会发生同样的事情。
您的历史记录可能如下所示:
*--*--X--Y---------------* [master]
\ \ /
\ *--*--*--*--A [formerly feature-branch]
\
*--*--* [version-branch]
最简单的部分是重新获得feature-branch
。 只需找出提交哈希A
并执行:
git checkout -b feature-branch A
但是,如果version-branch
在 feature-branch
之前从master
feature-branch
(如上所示),则您不想进行直接的git merge
或git rebase
,因为这也会带来提交X
和Y
相反,执行--onto
变基:
git rebase --onto version-branch Y feature-branch
为了更容易找到Y
,您可以执行以下操作:
git merge-base master feature-branch
或多合一命令:
git rebase --onto version-branch $(git merge-base master feature-branch) feature-branch
完成基础调整后,您可以照常合并到version-branch
中。
如果您在重新设置基准期间遇到任何合并冲突(或者在feature-branch
完成之时或之后version-branch
脱离了master
feature-branch
,而您仍然遇到冲突),那么您将不得不对其进行处理,因为这意味着冲突发生在在feature-branch
中提交,并在version-branch
提交。
您将在版本分支中遇到合并冲突,因为功能分支基于主分支,而(旧)版本分支具有不同的历史记录(樱桃选择的提交,合并等)。 如果当前功能分支基于master,则来自其他未合并功能的其他提交。 因此,我希望这将是很多艰苦的冲突解决工作。
我想您甚至无法调整基准。 如果将版本分支重新设置为Feature分支的基础,则樱桃选择的合并和版本分支的已解决旧冲突将再次应用,并导致新的冲突。
所以我认为您的过程是错误的。 如果您想将新功能应用于旧版本,则功能分支必须基于最旧的版本分支。 否则,您可能会更改新功能中的代码,而该功能从来都不是旧版本的一部分,因为它仅合并到master中。
我建议为版本(分支)创建不同的存储库,而不要使用分支进行版本控制。 它使维护更加容易。 要将功能应用于其他版本,请在实现完成后将其推送到功能分支中的目标版本库。 然后,您可以在代码中进行必要的更改,解决冲突等,然后将其合并到版本库的主版本中。
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.