Git cherry-pick在文件不存在时不显示冲突?

3
我正在从分支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中引入的文件作为冲突。当我挑选提交6时,我只丢失了在那个文件中所做的更改。这是否是预期的?我做错了吗?
我运行的命令只是 "git cherry-pick "

当您尝试挑选一个提交时,如果它尝试覆盖现有文件并且无法使用“自动合并”,则会出现冲突。如果没有文件,则没有冲突:自动合并确定新文件是要保留的文件。(如果我理解正确的话)。 - Riccardo Petraglia
抱歉解释不够清楚。问题是它甚至没有保留新文件。它仅未能找到文件(在提交5中引入)以应用更改(在提交6中引入),并且什么也没做。该文件只是从提交中消失了。 - Abhishek Somani
这很奇怪。我发现git实际上在我的树中的一个完全不同的目录中创建了一个新文件,其中包含提交5和6的更改(即该文件的提交6的最终状态),并且文件名完全不同。它创建了一个名为“src/test/resources/RefreshedJarClassV2.txt”的文件,而原始文件的名称是“Constants.java”。到底发生了什么! - Abhishek Somani
如果一切顺利,应该会出现一个冲突消息,上面写着“我们已删除:foo”。 - ElpieKay
1个回答

1

既然提交 6 存在路径/文件 src/test/resources/RefreshedJarClassV2.txt,而该路径/文件在分支 B 上不存在,当你将提交 6 拉到分支 B 时,会出现未合并的路径,并且你需要将此路径标记为当前工作目录。具体步骤如下:

如果您已经按以下图表在分支 B 上拉取了提交 6

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 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接