Я пытаюсь использовать его git add --interactive
для выборочного добавления некоторых изменений в свой индекс, но постоянно получаю сообщение «Ваш отредактированный фрагмент не применяется. Отредактируйте снова ...». Я получаю это сообщение, даже если выберу опцию e, и сразу сохраню / закрою свой редактор. Другими словами, без редактирования фрагмента патч не применяется.
Вот точный пример, который я использую (я пытаюсь собрать небольшую демонстрацию):
Исходный файл:
first change
second change off branch
third change off branch
second change
third change
fourth change
Новый файл:
Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
bug fix 1
change supporting feature 1
Я пытаюсь показать, как использовать git add --interactive
для добавления в индекс только строки «исправление ошибки 1». Запуская интерактивное добавление к файлу, выбираю режим патча. Он представляет мне
diff --git a/newfile b/newfile
index 6d501a3..8b81ae9 100644
--- a/newfile
+++ b/newfile
@@ -1,6 +1,9 @@
+Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
+bug fix 1
+change supporting feature 1
Я отвечаю разделением, а затем «нет», чтобы применить первый кусок. Второй кусок, пытаюсь править. Изначально я пытался удалить нижнюю строку - это не сработало. Полностью оставить кусок в покое тоже не работает, и я не могу понять почему.
источник
-
символы в начале строк, которых нет в файле; это разница, и он не может удалять строки, которых еще нет. Итак, если строка в diff начинается с,+
а вы измените ее на-
git, идет WTF? потому что теперь строка, отмеченная для удаления, не существует с самого начала (вместо этого эта строка была отмечена для добавления, и когда строка, отмеченная для добавления, отмечена для удаления, git не может удалить строку, которой еще нет в файле) .Ответы:
В этом конкретном примере вам нужно настроить номера строк в блоке. Измените строку:
так что вместо этого читается:
источник
Это как в этом сообщении git-add ?
См. Также этот коммит в git add -p .
Ortomala Lokni «s ответ относится к Хоакин Windmüller блоге„ Избирательно отборных изменений совершить с мерзавцем (или Имма редактировать ваш красавчик) “
Вместо подсчета строк Git хотел бы объединить перекрывающиеся фрагменты (когда один редактируется) перед применением указанного отредактированного фрагмента.
Это обсуждалось в середине 2018 года и позволит избежать такого сценария:
источник
- foo
на «(просто пустое место, а не« пустое место и вся строка »). Мне потребовалось время, чтобы понять, что это должен был быть `foo`.Конечно, я опоздал с этим, но тем не менее хотел отметить для записи, что этот вопрос обсуждался в прошлом году в списке рассылки git, и с тех пор мало что изменилось.
Эта конкретная проблема возникает из-за разделения и попытки редактирования одного и того же фрагмента. Анализ основной проблемы, первоначально опубликованный Джеффом Кингом, по сути таков:
Джефф завершает свой пост очень прагматичным обходным решением, которое всегда приводит к успеху и поэтому настоятельно рекомендуется:
Выбрав для редактирования только кусок, который ранее не был разделен, вам не придется иметь дело с номерами строк.
источник
^M
в файле diff. Как только я сохранил файл с окончаниями CR, патч интерактивного редактирования прошел!Если вы не хотите удалять строку, предназначенную для удаления, как в
где вы хотите сохранить вторую строку, убедитесь, что вы заменили
-
пробел, а не удаляли всю строку (как если бы вы избавились от добавленной строки). Git будет использовать эту строку для контекста.источник
Также важно правильно изменить заголовок ханка (например
@@ -1,6 +1,9 @@
). Хоакин Виндмюллер раскрывает секрет редактирования заголовка блока в одном из своих сообщений в блоге .источник
Недавно я понял, читая эту ветку, как редактировать вручную.
Уловка, которую я использовал, заключалась в том, что если у меня есть разница вроде:
Хитрость заключается в том, чтобы полностью удалить две строки, которые мне не нужны, в результате чего полученная разница будет выглядеть так:
Хотя это, скорее всего, очевидно для большинства людей, до сегодняшнего дня это было не для меня, и я подумал, что должен просто поделиться своим опытом. Скажите, пожалуйста, есть ли опасность для этого метода.
источник
+
на' '
как минимум час.Вы можете вручную редактировать номера строк, что в некоторых случаях определенно полезно. Однако вы, вероятно, могли бы избежать этой конкретной проблемы, НЕ разделив сначала кусок.
Если вы видите, что вам, вероятно, потребуется отредактировать что-то позже в фрагменте, который Git автоматически выбрал, лучше всего просто отредактировать весь фрагмент, а не разделять, размещать половину, а затем редактировать другую половину. Git лучше справится с этим.
источник
Я пришел к этому вопросу в поисках решения той же проблемы и не мог понять, как изменить номера строк (как было предложено выше) в блоке, чтобы git accept его в моем случае. Я нашел гораздо лучший способ сделать это, используя
git gui
. Там вы можете выбрать строки в различии, которые вы хотите подготовить, затем щелкните правой кнопкой мыши и выберите «Строки этапа из фиксации». Я помню, что у git-cola такая же функциональность.источник
git-cola
похоже, работает в Linux, Windows и MacOS.Когда я получил эту ошибку, у меня возникла дополнительная проблема: концы строк изменились, когда я сохранил файл редактирования.
Я использовал Windows и Блокнот для своих правок (сохраняет только с окончанием строки Windows). Мой код был написан с помощью Notepad ++, и я установил в нем окончания строк в стиле Unix / Linux.
Когда я изменил свои настройки, чтобы использовать Notepad ++ в качестве редактора git по умолчанию, я смог внести свои изменения в кусок.
источник
git config --global core.editor '"C:/Program\ Files\ \(x86\)/Notepad++/notepad++.exe"'
(адаптируйте его в соответствии с тем, где на вашем компьютере установлен notepad ++)Одной из причин появления странных сообщений «Ваш отредактированный кусок не применяется» (вероятно, сопровождаемых чем-то вроде «ошибка: фрагмент исправления без заголовка в строке ...») может быть ваш редактор, если он настроен на удаление конечных пробелов. Это, очевидно, вызовет серьезные проблемы, поскольку патчи кодируют пустые строки как строки с одним пробелом, любой блок, содержащий пустые строки, не сможет применяться, если он сохранен с помощью такого редактора. Таким образом, фактически любой блок, содержащий какие-либо неизмененные пустые строки, не будет применяться после редактирования, если включено удаление завершающих пробелов.
источник
FYI, я получал слегка взаимосвязанную ошибку ... когда я добавлял исправление, следуя предложенной выше инструкции ... Однако ошибки не было. Я получал его неоднократно, прося меня подготовить один и тот же кусок ... Я заметил, что использую старую версию Vim 7.4 ... Я обновил vim, и теперь он работает, как ожидалось. Надеюсь, это кому-то поможет ..
источник