通过使用git樱桃选择,我一直试图将最后一次提交从一个分支合并到另一个分支。但是它总是导致合并冲突,而它实际上不应该发生。下面就是我一直在做的事情,它总是导致冲突。
MASTER - 1st commitMASTER - 1st commit : TESTING 1st commit3.)在文件的同一行上做进一步的更改,然后再次提交。因此,在最后,文件内容将如下所示。
MASTER - 1st commit : TESTING 1st commit : TESTING 2nd commit现在,这将留给我们在主分支上提交1次,在测试中提交2次。因此,如果我们签出主服务器并执行git merge testing,那么由于从主到最后一次提交到测试之间有一个直接的路径,因此,git将使用快速转发技术,并且没有任何合并冲突,它将直接结合从测试到主控的更改。因此,我的问题是,为什么在我尝试git cherry-pick testing (即将测试中的最后一次提交合并到master,而后者又有一条直接的路径)时,情况并非如此。如果我在这里做错了,那么请建议,怎样才是正确的方法。
发布于 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之上。
将所有提交都应用于使用樱桃挑选的分支的一种更系统的方法是:
# 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>有一个差异,它说:
# 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您尝试将其应用于一个分支,其中该文件的内容是:
# uh oh, no line saying 'MASTER - 1st commit : TESTING 1st commit'
MASTER - 1st commit所以你肯定会有冲突的。
https://stackoverflow.com/questions/72847713
复制相似问题