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 работает. Когда в блоке нет ведущей контекстной строки, блок должен применяться в начале прообраза. Точно так же отсутствие конечного контекста означает, что блок закрепляется в конце.

Другие вопросы по тегам