所以,我的项目中有一个维护分支和一个主分支。如果我在维护分支上进行了提交并希望将其向前合并到主分支,那很容易:
git checkout master; git merge maintenance
如果我想反过来,即将应用于主分支的提交应用于我的维护分支,该怎么做?这被认为是挑拣吗?如果我再次合并维护分支,会引起问题或冲突吗?
git checkout master; git merge maintenance
如果我想反过来,即将应用于主分支的提交应用于我的维护分支,该怎么做?这被认为是挑拣吗?如果我再次合并维护分支,会引起问题或冲突吗?
这正是使用git-cherry-pick的情况。
git checkout maintenance
git cherry-pick <commit from master>
和其他回答中建议使用 "git cherry-pick
" 不同的备选方案是为修复问题创建一个独立的 [topic] 分支,从维护分支上创建,并将该分支先合并到维护分支,然后再合并到主分支(trunk)。
这个工作流程在 git 维护者 Junio C Hamano 的博客文章“早期解决主题分支之间的冲突/依赖关系”中有些描述。
使用cherry-pick会导致重复提交,在后续合并或变基时可能会导致问题。基于主题分支的工作流程只保留修复的一个副本。
3.6
合并回CPython的GitHub存储库中的main
分支)。 - Géry Ogam对于无法使用git cherry-pick应用的复杂提交,您可以尝试
git checkout -b merge-branch master
git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master
是的,这被认为是挑选最好的部分,但通常情况下不应该引入问题。如果在回溯时提交无法干净地应用,则在挑选它时可能会面临完全相同的冲突。
git-deps
的工具来检测和可视化这些依赖项。如果您访问主页,您将看到两个YouTube视频:第一个是介绍该工具的概述,第二个演示了在挑选时如何使用它来避免冲突。 - Adam Spiers