2017-07-31 134 views
0

我是樱桃选择从分支A到分支B的分支。分支A是分支B之前的许多提交,并且我想忽略分支A中的一些先前提交并挑选未来提交。例如,分支A提交1,2,3,4,5,6,分支B只有1,2,我想从分支A中选择提交6到分支B.结果我没有意识到提交6更改提交5中引入的文件(哪个分支B没有)。但是在试图挑选6(到B分支)时,git并没有显示提交5中引入的文件是冲突。当我选择提交时,我刚刚丢失了该文件中所做的更改。是否期望?我做错了吗?当文件不存在时git cherry-pick不显示冲突?

我跑的命令只是“混帐樱桃采摘<提交-ID >”

+0

当您正在进行樱桃挑选的提交尝试覆盖现有文件并且无法使用“自动合并”时,您会发生冲突。如果没有文件,则不存在冲突:自动合并确定新文件是要保留的文件。 (如果我理解了这个想法)。 –

+0

对不起,不好解释。问题是它甚至没有保留新文件。它只是没有找到该文件(在提交5中引入)来应用更改(在提交6中引入),并且什么都没做。该文件从提交中消失。 –

+0

这很奇怪。我发现git实际上创建了一个新的文件,其中提交5和6的更改(即该文件的提交6的最终状态)在我的树中完全不同的目录中,并且具有完全不同的文件名。它创建了一个文件“src/test/resources/RefreshedJarClassV2.txt”,而原来的文件被称为“Constants.java”。发生什么事! –

回答

0

由于提交6具有未分支B存在,当你摘樱桃提交6路径/文件src/test/resources/RefreshedJarClassV2.txt分支B。将显示未合并路径,您应该将此路径标记为当前工作目录。详细步骤如下:

如果你已经摘樱桃提交6分支B如下图,

1---2---6'   Branch B 
    \ 
     3---4---5---6 Branch A 

你应该重新设置分支B为原文:

git checkout B 
git reset --hard <commit id for 2> 

然后分支结构将看起来像原始的:

1---2    Branch B 
    \ 
     3---4---5---6 Branch A 

现在摘樱桃再犯6

git cherry-pick <commit id for 6> 
git add . 
git cherry-pick --continue 

和路径和文件src/test/resources/RefreshedJarClassV2.txt将在分支B显示。