繁体   English   中英

在另一个分支中合并Git中的功能?

[英]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 mergegit rebase ,因为这也会带来提交XY 相反,执行--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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM