Git patch - патч не применяется
Я пытаюсь разделить изменения на несколько коммитов, но я сталкиваюсь с проблемой при ручном редактировании блока.
Оригинальный кусок:
@@ -116,8 +116,8 @@
context
context
- remove 1
- remove 2
- remove 3
+ add 1
+ add 2
+ add 3
context
context
context
Я хочу, чтобы в постановку были внесены только те изменения, которые произошли в "удалить 1" и "удалить 2". Другими словами, мне нужно "удалить 3", чтобы исключить из коммита.
Я попробовал это:
@@ -116,4 +116,4 @@
context
context
- remove 1
- remove 2
+ add 1
+ add 2
Но он продолжает выводить патч не применяется. Я удалил только последние строки контекста и удалил 3 и добавил 3. Я отредактировал диапазон фрагментов и вычел 4 исключенных строки (3 - контекст 1 - изменения, 1 - удалено и 1 добавлено)
Я использовал 2 разных редактора, 'nano' и 'sublime text', и оба имеют одинаковый результат. Я убедился, что нет пустых строк, которые не закомментированы.
Что я делаю неправильно?
2 ответа
Что я делаю неправильно?
Ну, вы вручную редактируете файл патча, что кажется странным делом...
Из того, что я могу сказать, git
требует завершающего контекста в патче. Например, если я начну с файла, который выглядит следующим образом:
the
quick
brown
fox
jumped
over
the
lazy
dog
И у меня есть такой патч:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,9 +1,9 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
lazy
dog
Это относится без проблем:
$ git apply mypatch
Если я удаляю завершающий контекст в этом патче (и обновляю номера строк), давая мне это:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,6 +1,6 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
затем git
откажется применять патч:
$ git apply diff
error: patch failed: file1:1
error: file1: patch does not apply
Если добавить еще одну строку конечного контекста, он будет работать:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,7 +1,7 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
Вот как git-apply
работает. Когда в блоке нет ведущей контекстной строки, блок должен применяться в начале прообраза. Точно так же отсутствие конечного контекста означает, что блок закрепляется в конце.