Как я могу применить отклоненные блоки после их исправления?
Я пытаюсь применить патч к файлу, используя git apply
, Общий патч не удался, поэтому я использовал git apply --reject
,
Проверка сформированного .rej
файл показал мне, что не так, теперь я исправил проблему в .rej
файл.
Но пытаясь применить .rej
файл не с сообщением
роковой: фрагмент патча без заголовка в строке 2: ...
Есть ли способ повторно применить .rej
файл после исправления проблем есть? Или я должен изменить исходный патч и перезапустить git apply
?
Это было бы немного громоздко в этом случае, так как оригинальный патч содержит патчи для десятков файлов, и я не хочу git checkout
примененные модификации с целью git apply
весь исправленный файл патча.
3 ответа
Чтобы уточнить, что сказал @julian-squires, проблема в том, что .rej
файлы отсутствуют некоторые мелочи между diff a/thefile...
а также @@ -line/columns...
,
ОРИГИНАЛ .rej
файл
diff a/the/original/file.cs b/the/original/file.cs (rejected hunks) @@ -27,9 +27,9 @@ whatever was on that line
Вам необходимо скопировать имена файлов a / b из diff
и добавьте их с помощью индикаторов изменений ниже, например:
ОБНОВЛЕНО .rej
файл
diff a/the/original/file.cs b/the/original/file.cs (rejected hunks) --- a/the/original/file.cs +++ b/the/original/file.cs @@ -27,9 +27,9 @@ whatever was on that line
Затем вы можете применить .rej
файлы как обычный патч.
У меня недавно была эта проблема при использовании git am --reject
применить кучу патчей. То, как я подошел к этому, было сделать массаж .rej
заголовок файла во что-то patch(1)
признал бы, с
sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/'
и изменил их с помощью Emacs (чьи diff-mode
обновит количество строк в блоках при изменении патча) и применил их с patch
,
Мой рабочий процесс в итоге выглядел так:
$ (for i in $(find . -name \*.rej); do
sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' -i $i &&
emacsclient $i &&
patch -p0 < $i;
done) && git add -u && git clean -xdf && git am --continue
с подходящими настройками макросов в emacs для повторяющихся случаев. Не самый элегантный подход, но это сработало.
Невозможно вручную изменить файлы там, где есть .rej
файл. Вы сказали, что исправили это. Однажды все .rej
вопросы были решены, вы готовы к git commit
, git apply --reject
все еще экономит немного времени в этом git apply --reject
будет изменять файлы, где это возможно.