首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用快速转发技术实现樱桃采摘

如何利用快速转发技术实现樱桃采摘
EN

Stack Overflow用户
提问于 2022-07-03 15:24:42
回答 1查看 231关注 0票数 -1

通过使用git樱桃选择,我一直试图将最后一次提交从一个分支合并到另一个分支。但是它总是导致合并冲突,而它实际上不应该发生。下面就是我一直在做的事情,它总是导致冲突。

  1. 启动一个新的存储库,并在主分支上提交一个新的文件。该文件将具有以下内容-

代码语言:javascript
复制
MASTER - 1st commit

  1. 签出到一个名为to的新分支,并对该文件进行以下更改,然后再次提交.

代码语言:javascript
复制
MASTER - 1st commit : TESTING 1st commit

3.)在文件的同一行上做进一步的更改,然后再次提交。因此,在最后,文件内容将如下所示。

代码语言:javascript
复制
MASTER - 1st commit : TESTING 1st commit : TESTING 2nd commit

现在,这将留给我们在主分支上提交1次,在测试中提交2次。因此,如果我们签出主服务器并执行git merge testing,那么由于从主到最后一次提交到测试之间有一个直接的路径,因此,git将使用快速转发技术,并且没有任何合并冲突,它将直接结合从测试到主控的更改。因此,我的问题是,为什么在我尝试git cherry-pick testing (即将测试中的最后一次提交合并到master,而后者又有一条直接的路径)时,情况并非如此。如果我在这里做错了,那么请建议,怎样才是正确的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-04 05:24:33

在这两种情况下,应用的修补程序是不同的。

此外,git merge还具有“快速转发”功能,如果它确定产生正确合并的一种方法是简单地将分支A移动到分支B所在的位置,那么它就是这样做的,这总是导致无冲突的解决方案。

在您描述的示例中:

  • 碰巧testing领先于master,因此可以使用快速转发来解决合并,而没有冲突;
  • --碰巧您在cherry-pick命令中选择的提交创建了一个修补程序,无法像当前提交那样应用,因此出现了冲突

在您描述的示例中:

如果同时应用这两种提交,

  • cherry-pick就不会发生冲突:

吉特奇瑞-挑选<1 commit> <2 commit>

这将产生与运行git merge testing相同的最终结果:testing上的所有更改都将添加到master之上。

将所有提交都应用于使用樱桃挑选的分支的一种更系统的方法是:

代码语言:javascript
复制
# you don't have to name the commits one by one :
# let git compute that for you
git cherry-pick master..testing

  • 如果您确实需要只应用<2nd commit>并排除<1st commit> :

<2nd commit>有一个差异,它说:

代码语言:javascript
复制
# replace the line that says 'MASTER ... 1st commit'
# with a line that says 'MASTER ... 2nd commit'
-MASTER - 1st commit : TESTING 1st commit
+MASTER - 1st commit : TESTING 1st commit : TESTING 2nd commit

您尝试将其应用于一个分支,其中该文件的内容是:

代码语言:javascript
复制
# uh oh, no line saying 'MASTER - 1st commit : TESTING 1st commit'
MASTER - 1st commit

所以你肯定会有冲突的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72847713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档