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) Я повторно применяю патч 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?