мерзавец добавляет - интерактивный “Ваш отредактированный ломоть, не применяется”

Я пытаюсь использовать 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

Я отвечаю разделением, сопровождаемым "нет" для применения первого ломтя. Второй ломоть, я пытаюсь отредактировать. Я первоначально пытался удалить нижнюю строку - который не работал. Оставление в покое ломтя полностью не работает также, и я не могу выяснить почему.

80
задан albfan 7 June 2015 в 08:57
поделиться

2 ответа

В этом конкретном примере вам нужно настроить номера строк в блоке. Измените строку:

@@ -1,6 +2,8 @@

так, чтобы она читалась следующим образом:

@@ -2,7 +2,8 @@
37
ответ дан 24 November 2019 в 09:47
поделиться

Это похоже на этот пост git-add ?

Ручное редактирование блока - это очень мощно, но также немного сложно, если вы никогда не делали этого раньше .
Самая важная вещь, о которой следует помнить: разница всегда имеет отступ одним символом в дополнение к любому другому отступу.
Символ может быть:

  • пробелом (указывает на неизмененную строку),
  • a - , указывающим, что строка была удалена,
  • или + ], указывающий на добавление строки.

Больше ничего. Это должен быть либо пробел, либо «-», либо «+». Что-нибудь еще, и вы получите ошибку
(нет символа для измененной строки, поскольку они обрабатываются путем удаления старой строки и добавления измененной строки как новой).

Поскольку в вашем любимом текстовом редакторе открыто различие (вы ведь настроили Git для использования вашего любимого текстового редактора, не так ли?), Вы можете делать все, что захотите - при условии, что полученное различие применяется чисто. .

И в этом вся уловка. Если вы никогда не делали этого раньше, Git сообщит вам: «Ваш отредактированный кусок не применяется. Изменить снова?» так часто вы начинаете ненавидеть себя за свою неспособность понять это , даже если это кажется таким простым (или Git, потому что он не может понять, чего вы хотите).

Одна вещь, которая очень часто сбивала меня с толку, заключалась в том, что я забывал об отступе на один символ.
Я бы отметил строку знаком - для удаления, но в большинстве текстовых редакторов, которые вставляют - , он не перезаписывает пространство, которое было раньше. Это означает, что вы добавляете дополнительный пробел ко всей строке, что, в свою очередь, означает, что алгоритм сравнения не может найти / сопоставить строку в исходном файле, что, в свою очередь, означает, что Git будет кричать на вас .

Другое дело, что разница все еще должна иметь смысл. «Смысл» означает, что его можно наносить чисто. То, как вы создаете разумную разницу, кажется чем-то вроде темного искусства (по крайней мере, для меня сейчас), но вы всегда должны помнить, как выглядел исходный файл, а затем планировать свои -s и + s соответственно. Если вы будете редактировать свои фрагменты достаточно часто, вы в конечном итоге научитесь этому.

См. Также этот коммит в git add -p .

Ортомала Локни ответ относится к сообщению в блоге Хоакина Виндмюллера " Выборочно выберите изменения для фиксации с помощью git (или Имма отредактирует ваш кусок) "

Вместо подсчета строк Git хотел бы объединить перекрывающиеся фрагменты (когда один редактируется) перед применением указанного отредактированного фрагмента.
Это обсуждалось в середине 2018 года , и позволит избежать сценария вроде:

если вы разделите кусок, отредактируйте первый фрагмент, преобразовав завершающую строку контекста до удаления, тогда, если вы попытаетесь второй подханк, он выйдет из строя.

100
ответ дан 24 November 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: