我如何在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:第一个给出了该工具的一般介绍,第二个演示了如何在采摘时避免冲突。