Я пытаюсь использовать 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
Я отвечаю разделением, сопровождаемым "нет" для применения первого ломтя. Второй ломоть, я пытаюсь отредактировать. Я первоначально пытался удалить нижнюю строку - который не работал. Оставление в покое ломтя полностью не работает также, и я не могу выяснить почему.
В этом конкретном примере вам нужно настроить номера строк в блоке. Измените строку:
@@ -1,6 +2,8 @@
так, чтобы она читалась следующим образом:
@@ -2,7 +2,8 @@
Это похоже на этот пост git-add ?
Ручное редактирование блока - это очень мощно, но также немного сложно, если вы никогда не делали этого раньше .
Самая важная вещь, о которой следует помнить: разница всегда имеет отступ одним символом в дополнение к любому другому отступу.
Символ может быть:
- пробелом (указывает на неизмененную строку),
- a
-
, указывающим, что строка была удалена,- или
+
], указывающий на добавление строки.Больше ничего. Это должен быть либо пробел, либо «-», либо «+». Что-нибудь еще, и вы получите ошибку
(нет символа для измененной строки, поскольку они обрабатываются путем удаления старой строки и добавления измененной строки как новой).Поскольку в вашем любимом текстовом редакторе открыто различие (вы ведь настроили Git для использования вашего любимого текстового редактора, не так ли?), Вы можете делать все, что захотите - при условии, что полученное различие применяется чисто. .
И в этом вся уловка. Если вы никогда не делали этого раньше, Git сообщит вам: «Ваш отредактированный кусок не применяется. Изменить снова?» так часто вы начинаете ненавидеть себя за свою неспособность понять это , даже если это кажется таким простым (или Git, потому что он не может понять, чего вы хотите).
Одна вещь, которая очень часто сбивала меня с толку, заключалась в том, что я забывал об отступе на один символ.
Я бы отметил строку знаком - для удаления, но в большинстве текстовых редакторов, которые вставляют-
, он не перезаписывает пространство, которое было раньше. Это означает, что вы добавляете дополнительный пробел ко всей строке, что, в свою очередь, означает, что алгоритм сравнения не может найти / сопоставить строку в исходном файле, что, в свою очередь, означает, что Git будет кричать на вас .Другое дело, что разница все еще должна иметь смысл. «Смысл» означает, что его можно наносить чисто. То, как вы создаете разумную разницу, кажется чем-то вроде темного искусства (по крайней мере, для меня сейчас), но вы всегда должны помнить, как выглядел исходный файл, а затем планировать свои -s и + s соответственно. Если вы будете редактировать свои фрагменты достаточно часто, вы в конечном итоге научитесь этому.
См. Также этот коммит в git add -p .
Ортомала Локни ответ относится к сообщению в блоге Хоакина Виндмюллера " Выборочно выберите изменения для фиксации с помощью git (или Имма отредактирует ваш кусок) "
Вместо подсчета строк Git хотел бы объединить перекрывающиеся фрагменты (когда один редактируется) перед применением указанного отредактированного фрагмента.
Это обсуждалось в середине 2018 года , и позволит избежать сценария вроде:
если вы разделите кусок, отредактируйте первый фрагмент, преобразовав завершающую строку контекста до удаления, тогда, если вы попытаетесь второй подханк, он выйдет из строя.