&引用;git apply";给出错误“;与索引“不匹配”;当上一个应用跳过大块时
git版本2.19.0 我从一个分支到另一个分支有两个提交文件“myfile”。在上次应用补丁时,我得到“错误:mydir/myfile:不匹配索引” 1) 我生成两个修补程序文件commit1.patch(最旧)和commit2.patch(最新): …正如预期的那样失败,因为补丁中的两个大块头修改了在比commit#1更早的commit中添加的代码块。我不应用那个旧的提交,因为它是我不希望在目标分支中使用的修复 3) 我使用--reject而不是-3重新应用补丁1,以跳过应用两个不适用的大块:&引用;git apply";给出错误“;与索引“不匹配”;当上一个应用跳过大块时,git,git-apply,Git,Git Apply,git版本2.19.0 我从一个分支到另一个分支有两个提交文件“myfile”。在上次应用补丁时,我得到“错误:mydir/myfile:不匹配索引” 1) 我生成两个修补程序文件commit1.patch(最旧)和commit2.patch(最新): …正如预期的那样失败,因为补丁中的两个大块头修改了在比commit#1更早的commit中添加的代码块。我不应用那个旧的提交,因为它是我不希望在目标分支中使用的修复 3) 我使用--reject而不是-3重新应用补丁1,以跳过应用两个不适用的大块
git apply --reject 1.patch
。。。它不记录错误,并按预期记录跳过的两个补丁块,并应用补丁的其余部分
4) 我应用补丁#2:
为什么错误“与索引不匹配”“git status”显示暂存为空,“git fsck”不报告错误,“git diff--cached”不报告任何内容
我找到了一个解决方法:重新克隆目标分支,编辑掉无法从commit1.patch应用的两个大块,然后执行以下操作:
git apply -3 commit1.patch
git apply -3 commit2.patch
…工作正常,没有错误
如何解决commit2.patch输出中的“不匹配索引”错误,而不是首先手动从commit1.patch中删除两个大块?您的问题的答案在中,但在几个部分中,我添加了黑体字(选项已经是黑体字): -3,--3路
当修补程序无法干净地应用时,如果需要,请使用三向合并 补丁记录了它应该应用于的blob的身份, 我们可以在当地找到这些斑点,可能离开 工作树中文件中的冲突标记,供用户使用 决心此选项意味着
--索引
选项,并且
与--reject
和--cached
选项不兼容
从这里开始,您必须后退一点:
--索引当
--检查生效时,或当应用修补程序时(即
默认情况下,禁用该选项的选项均无效),
确保修补程序适用于当前索引文件的内容
记录如果要在工作树中修补的文件未达到
日期,它被标记为错误。此标记也会导致索引
要更新的文件
因此,通过使用-3
打开了--index
,如果文件的工作树副本与文件的索引副本不匹配,则--index
会显式调用错误
在前面的步骤3中,您手动运行了git apply--reject
,而没有-3
或--index
。这在创建.rej
文件时不会失败,但会使索引和工作树副本不同
如果使用-3
没有任何意义,只需在这两种情况下都不使用它,这样您就可以在不更新文件索引副本的情况下进行应用,也不必约束文件的工作树副本以匹配文件的索引副本。谢谢!根据您的建议,我开始清理并运行“git apply--reject commit1.patch”,然后运行“git apply commit2.patch”。完成时没有错误,并按预期跳过了修补程序1中的两个大块头。
git apply --reject 1.patch
git apply -3 commit2.patch
error: mydir/myfile: does not match index
git apply -3 commit1.patch
git apply -3 commit2.patch