如果git-am失败并且"索引中不存在"该怎么办?

a1a*_*1an 15 git git-am

当我尝试使用git am应用它时,我有一个补丁,它给出了以下输出

Checking patch old/filename...
error: old/filename: does not exist in index
Run Code Online (Sandbox Code Playgroud)

在补丁中,old/filename实际上被移动到new/filename,但似乎源树中已经缺少原始文件.

那么什么是错误以及如何解决/解决它?它可以被忽略(使用--reject等)吗?

小智 7

未针对正确的源树创建修补程序.

这可能发生的一种方式:

假设你的原始分支(你要应用补丁的那个)有提交:

  1. 1a - > 1b - > 1c - > 1d

然后克隆该分支,并进行新的提交:

  1. 1a - > 1b - > 1c - > 1d - > 1e

提交1e包括旧/文件名

现在你在补丁中完成工作,基于第二个分支,而不是原始分支:

  1. 1a - > 1b - > 1c - > 1d - > 1e - > 1f

提交1f包括重命名old/filename - > new/filename

现在,如果为commit 1f创建补丁,则无法在commit 1d之上应用它,因为在将旧/文件名添加到索引/存储库的地方缺少commit 1e.