我如何在git中递交提交?
所以,我的项目中有一个维护分支和一个主分支。 如果我在维护分支中进行提交,并希望将其合并到主分支,那很简单:
git checkout master; git merge maintenance
但是如果我想反过来,也就是把一个提交给我的维护分支提交给我,我该怎么做? 这被认为是樱桃采摘? 如果我再次将维护分支合并,会造成问题或冲突吗?
这正是git-cherry-pick的用例
git checkout maintenance git cherry-pick <commit from master>
使用“ git cherry-pick
”的替代解决scheme(在其他响应中推荐)是为维护分支创build一个单独的[topic]分支,并将该分支首先合并到维护分支,然后合并到主分支(trunk) 。
这个工作stream(有点)描述了解决主题分支之间的冲突/依赖关系 Junio C Hamano,git维护者的早期博客文章。
樱桃采摘会导致重复提交 ,在合并或重新绑定时可能会导致问题。 基于主题分支的工作stream程只保留一个修复副本。
是的,它被认为是樱桃采摘不, 一般不应该引入问题。 如果提交不适用于清理时,你可能面临完全相同的冲突时,樱桃采摘回来。
作为一般规则,我使用合并来移动树(从维护到主)的树状结构,并将树状结构(从主机到维护)向下“移动”。 这是在主分支提交的顺序是保持不变的。
重新存储基本上将当前分支上的所有更改回滚到分支(或最后一个分支),复制较新的更改,然后重新应用更改。
如果你不想从主人那里得到所有的改变,那么你可能需要挑选你想要的人。
对于使用git cherry-pick无法应用的复杂提交,您可以尝试
git checkout -b merge-branch master git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master
解释: http : //blog.boombatower.com/automatically-backport-commits-using-git 。
正如其他人已经指出,樱桃采摘可能是最好的select。 我只是想补充一点,挑选樱桃时的冲突通常可以通过检查你正在挑选的提交的“依赖关系”来解决,而且我已经构build了一个名为git-deps
的工具来检测和可视化这些依赖关系。 如果您访问主页,您将看到两个YouTubevideo:第一个给出了该工具的一般介绍,第二个演示了如何在采摘时避免冲突。