2013-10-01 541 views
9

我有一个修补程序,给出了下面的输出,当我试图用git应用它正在如果git-am失败,“索引中不存在”怎么办?

Checking patch old/filename... 
error: old/filename: does not exist in index 

在修补旧/文件名实际上是转移到新/文件名,但它似乎原来的文件已经丢失来自源树。

那么错误是什么以及如何解决/解决它呢?它可以被忽略(与 - 反对或左右)?

回答

3

修补程序不是针对正确的源代码树创建的。

的一种方式,这可能会发生:

假设你的原分公司(要应用补丁的一个)的提交:

  1. 1A - > 1B - > 1C - > 1D

然后将该分支被克隆,并提交新制成:

  • 1A - > 1B - > 1C - > 1D - > 1E
  • 提交1E包含旧/文件名

    现在做的工作在补丁,基于所述第二分支,而不是原来之一:

  • 1A - > 1B - > 1C - > 1D - > 1E - > 1F
  • 提交1F包括重命名旧/文件名 - >新/文件名现在

    ,如果你创建了一个补丁用于提交1F,Y ou将无法将其应用于提交1d之上,因为commit 1e缺少旧/文件名添加到索引/存储库的位置。

    +0

    你可以快速检查一下git所抱怨的文件是否仍然存在。我刚才遇到了这个问题,文件git抱怨已经被我的同事实际移动了,因此也是这个问题。 Git cherry-pick在这些问题上更聪明,这对我来说非常有用(但你必须通过commit来做到这一点)。 – user3613932

    相关问题