UNIX определяет строку как «строку символов, оканчивающихся на конец строки». Таким образом, почти все редакторы на основе UNIX будут иметь такие строки:
1\n
2\n
3\n
где \n
представляет символ НЧ, обозначающий конец строки. Если бы вы добавили четвертую строку здесь, это была бы действительно одна новая строка.
Windows не разделяет это определение, и многие редакторы на базе Windows рассматривают комбинацию CR + LF (отмеченную ниже как \r\n
) как строку разделитель , а не строку терминатор . * * * * * * * * * * * * * * * * * * * * * Как отмечается с "\ Нет новой строки в конце файла", ваш файл
1\r\n
2\r\n
3
Когда вы добавили еще одну строку, вы получили
1\r\n
2\r\n
3\r\n
4
Таким образом, с точки зрения git
, ориентированной на UNIX, вы изменили строку # 3, добавив к ней \r\n
.
Теперь к недоразумению о diff
формате вывода: по умолчанию diff
дает вам «унифицированный» формат, с некоторым контекстом вокруг изменений. Изменения - это только строки, к которым добавлен префикс +
или -
: исходная строка 3 была удалена, а новые строки 3 и 4 вставлены. Запись @@ -1,3 +1,4 @@
говорит о том, что приведенный ниже фрагмент описывает строки 1-3 старого файла и строки 1-4 нового файла. Обычно унифицированный вывод diff по умолчанию также дает вам две строки контекста до и после каждого изменения, чтобы помочь людям понять, что именно изменилось (-U2
). Если вам не нужен контекст, вы можете отключить его с помощью -U0
.