git 版本 2.19.0
我对文件“myfile”有两个提交,我正在从一个分支挑选到另一个分支。在最后一个补丁应用期间,我收到“错误:mydir/myfile:与索引不匹配”。
1)我生成两个补丁文件commit1.patch(最旧)和commit2.patch(最新):
cd /target-branch
git --git-dir=/source-branch/myrepo/.git format-patch -k -1 <commit N's ID>
2)我应用补丁#1:
git apply -3 commit1.patch
error: patch failed: mydir/myfile:17
error: repository lacks the necessary blob to fall back on 3-way merge.
error: mydir/myfile: patch does not apply
...它按预期失败,因为补丁中的两个大块修改了在提交 #1 之前的提交中添加的代码块。我没有应用那个较旧的提交,因为这是我不希望在目标分支中进行的修复。
3) 我使用 --reject 而不是 -3 重新应用补丁 1 以跳过应用两个不适用的大块:
git apply --reject 1.patch
...它不记录任何错误并记录它按预期跳过的两个补丁块,并应用补丁的其余部分。
4)我应用补丁#2:
git apply -3 commit2.patch
error: mydir/myfile: does not match index
为什么错误“与索引不匹配”? 'git status' 显示暂存为空,'git fsck' 没有报告错误,'git diff --cached' 没有报告任何内容。
我找到了一个解决方法:新鲜克隆目标分支,编辑掉无法从commit1.patch应用的两个大块,然后执行:
git apply -3 commit1.patch
git apply -3 commit2.patch
......没有错误
除了首先手动从 commit1.patch 中删除两个大块之外,如何解决“不匹配索引”错误 commit2.patch 输出?