git - 如果 git-am 失败并显示 “does not exist in index” 怎么办?

标签 git git-am

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

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

在补丁中,旧的/文件名实际上被移动到新的/文件名,但原始文件似乎已经从源代码树中丢失了。

那么错误是什么以及如何解决/变通呢?是否可以忽略它(使用 --reject 或其他)?

最佳答案

补丁不是针对正确的源代码树创建的。

这可能发生的一种方式:

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

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

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

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

提交 1e 包括旧/文件名

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

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

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

现在,如果您为提交 1f 创建补丁,您将无法在提交 1d 之上应用它,因为提交 1e 丢失,其中旧/文件名被添加到索引/存储库。

关于git - 如果 git-am 失败并显示 “does not exist in index” 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19115772/

相关文章:

windows - Jenkins 不能很好地处理私有(private) GitHub 存储库 (Windows)

c# - Git 从不同用户的批处理文件中提取

linux - eclipse : impossible to import git project

git - 如何 'git-am' 应用使用 'git-format-patch --no-prefix' 创建的补丁?

git - 自从我删除了最后一次提交后,新提交被拒绝

git - 在 Git Bash 终端上从 .bat 文件执行命令

git am 正在从我的提交消息中阻塞字符

git - 使用 "git am"保留提交 ID 标签

git - cherry-pick - HOWTO/WHYTO