git version 2.19.0
У меня есть два коммита для файла 'myfile'. Я выбираю вишню из одной ветви в другую.Во время применения последнего патча я получаю сообщение «error: 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) Я повторно применяю патч 1, используя --reject вместо -3, чтобы пропустить применение двух неприменимых блоков:
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
…, который работает без ошибок
Как устранить ошибку «не совпадает с индексом» выводов commit2.patch, кроме как сначала вручную удалить два фрагмента из commit1.patch?