Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中向后移植提交?_Git - Fatal编程技术网

如何在git中向后移植提交?

如何在git中向后移植提交?,git,Git,因此,我的项目中有一个维护分支和一个主分支。如果我在维护分支中进行了提交,并希望将其合并到主分支,这很容易: git checkout master; git merge maintenance 但如果我想换一种方式,即将对master的提交应用到我的维护分支,我该如何做?这算是樱桃采摘吗?如果我再次向前合并维护分支,会导致问题或冲突吗?这正是 git签出维护 吉特樱桃采摘 是的,它被认为是樱桃采摘,而不是,一般来说,它不应该带来问题。如果在后移植时提交没有干净地应用,那么当cherry将其取

因此,我的项目中有一个维护分支和一个主分支。如果我在维护分支中进行了提交,并希望将其合并到主分支,这很容易:

git checkout master; git merge maintenance

但如果我想换一种方式,即将对master的提交应用到我的维护分支,我该如何做?这算是樱桃采摘吗?如果我再次向前合并维护分支,会导致问题或冲突吗?

这正是

git签出维护
吉特樱桃采摘

是的,它被认为是樱桃采摘,而不是,一般来说,它不应该带来问题。如果在后移植时提交没有干净地应用,那么当cherry将其取回时,您可能会面临完全相同的冲突。

作为一般规则,我使用merge将更改“向上”移动到树上(从维护到主控),并使用rebase将更改“向下”移动到树上(从主控到维护)。因此,主分支中的提交顺序将得到维护

Rebase实际上是将当前分支上的所有更改回滚到分支(或最后一次Rebase),复制更新的更改,然后重新应用更改


如果您不想从主控台获得所有更改,那么您可能需要挑选您想要的更改。

使用“
git cherry pick
”(如其他响应中所建议的)的替代解决方案是创建一个单独的[主题]修复分支关闭维护分支,并首先将此分支合并到维护分支,然后合并到主分支(主干)

git维护人员Junio C Hamano在博客文章中(稍微)描述了这个工作流


Cherry picking会导致重复提交,这可能会在合并或重定基时导致问题。基于主题分支的工作流只保留修复程序的一个副本。

对于无法使用git应用的复杂提交,您可以尝试

git checkout -b merge-branch master
git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master

解释:。

我也很想知道重基。但是假设一个维护分支专门存在,没有所有当前的更改,那么这不是您想要的。对我来说,重新设置开发分支的基础似乎是最好的,但cherry选择了master(或任何上游开发分支)中的错误修复返回到维护。断开的链接。你有新的推荐人吗?ThanksI于2012年6月16日成功检索到该链接。太好了,它回来了。也许这只是暂时的。谢谢@mWalling当cherry在两个公共分支之间拾取时,使用-x开关附加“(cherry从提交中拾取…​)" 行到行选择没有冲突。我喜欢链接的帖子解释如何添加可能冲突的多个提交。在将功能A和Bug修复B合并到一起之前,先将它们合并到主分支或维护分支中。这样,您可以确保A和B之间的冲突得到解决,因此如果您先拉A或B,然后你可以很容易地将A+B合并到一起,并且知道它是为你预先合并的。请参阅。正如其他人已经说过的,樱桃采摘可能是最好的选择。我只是想补充一点,樱桃采摘过程中的冲突通常可以通过检查“依赖项”来解决“我创建的提交是为了检测和可视化这些依赖关系。如果你访问主页,你会看到两个YouTube视频:第一个是对该工具的一般介绍,第二个是演示如何使用它来避免在挑选樱桃时发生冲突。
git checkout -b merge-branch master
git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master