2016-05-25 8 views
1

У меня большой и сложный git diff. Он имеет около 1200 случаев, когда он удалил строку, содержащую строку «fubar» (с кавычками, если это имеет значение). Я хочу сделать это, но не удалять эти строки.Удалить линии из git-патча без разложения

Я попытался удалить каждую строку из следующей формы из файла исправления. Проблема в том, что тогда номера строк неверны, поэтому патч поврежден. Если вы не редактируете номера строк, мне интересно, есть ли разумная проблема.

Что я удалил:

- (whatever here) "fubar" (whatever else here) 
+0

Что commad, вы печатаете? 'git apply'? можете ли вы вставить полную команду, которую вы вводите (и более полный файл исправлений, который вы пытаетесь применить)? Вы знакомы с командой 'git add -p' – Asenar

+0

проклятый, слишком поздно для издания -_- А какое сообщение об ошибке у вас есть? – Asenar

+0

Коррумпированный патч в строке xxx –

ответ

0

В принципе, вы должны скопировать полную строку, а затем «удалить» первый символ (заменив пространство на начало линии с -), и «Добавить» вторую с изменением (что означает замену на +). В случае diff первый столбец является индикатором состояния линии (добавляется, удаляется или не изменяется).

«коррумпированной патч на линии ххх», вероятно, означает, что пространство отсутствует, или вы удалили строку «буквально» вместо того, чтобы отметить его как удаленные (со знаком минус -)

2

Если вы хотите патч не удаляйте строку, вы должны заменить - в начале строки пробелом. В вашем патче у вас есть неизмененная строка, которая остается там для контекста.

Заменить:

- (whatever here) "fubar" (whatever else here) 

с

(whatever here) "fubar" (whatever else here) 

(Обратите внимание, как текст в модифицированной линии по-прежнему совпадает с оригиналом, который подтверждает, что - был заменен пробелом и не только удалены.)

Чтобы лучше понять исправления, посмотрите на этот пример:

diff --git a/test.txt b/test.txt 
index 67179f2..9c17455 100644 
--- a/test.txt 
+++ b/test.txt 
@@ -2,6 +2,8 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
+Line 4.6 
Line 5 
Line 6 
Line 7 
@@ -10,8 +12,6 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
-Line 14 
Line 15 
Line 16 
Line 17 
@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 the cops 
Line 23 
Line 24 
Line 25 

Первые строки:

diff --git a/test.txt b/test.txt 
index 67179f2..9c17455 100644 
--- a/test.txt 
+++ b/test.txt 

говорят нам, что:

  • заботы дифференциалов файл test.txt в версии мы маркировать a, и тот же файл test.txt в версии мы маркировать b;
  • файл в версии a хранится под хешем 67179f2 и файл в версии b под хешем 9c17455 (это не хеширование хэшей, а хэш объектов, если я не ошибаюсь);
  • - в терминальных линиях означает версию a и + означает версию b.

Тогда мы имеем ломоть:

@@ -2,6 +2,8 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
+Line 4.6 
Line 5 
Line 6 
Line 7 
  • -2,6 означает, что он представляет собой 6 строк в версии a, начиная с линии 2;
  • +2,8 означает, что он представляет собой 8 линий в версии b, начиная с линии 2.

Действительно, мы добавили две линии, Line 4.5 и Line 4.6, которые мы можем видеть из + линий:

+Line 4.5 
+Line 4.6 

Обратите внимание, как другие, немодифицированные строки, отображаемые для контекста, начинаются с пробела, обозначающего их как строки контекста.

Если вы хотите изменить свой патч, чтобы не добавлять Line 4.6, вам необходимо удалить соответствующую строку +. Но вы также должны исправить счетчик строк в ломоть, потому что вы только добавить одну строку, так что вы в конечном итоге с 7 строк, а не 8:

@@ -2,6 +2,7 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
Line 5 
Line 6 
Line 7 

В нашем втором ломоть:

@@ -10,8 +12,6 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
-Line 14 
Line 15 
Line 16 
Line 17 
  • -10,8 означает, что он представляет 8 строк в версии a, начиная с строки 10;
  • +12,6 означает, что он представляет собой 6 строк в версии b, начиная с линии 12.

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

Теперь, если вы хотите не удалять строку 14, потому что вы только суеверны в отношении числа 13, вам необходимо сохранить строку 14, но как строку контекста, поскольку она все еще присутствует после применения патча. Таким образом, вы измените - в пространстве, и исправить количество строк (вы в конечном итоге с 7 строк, а не 6):

@@ -10,8 +12,7 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
Line 14 
Line 15 
Line 16 
Line 17 

Наконец, последний ломоть:

@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 the cops 
Line 23 
Line 24 
Line 25 

Это меняющийся Line 22 в Line 22 the cops, удалив старую строку и добавив измененную. Он начинается с строки 19 до и после, поскольку предыдущие ханки удаляли одинаковое количество строк, которые они добавили в общей сложности, и относятся к 7 линиям в обоих направлениях, поскольку он добавляет один и удаляет один.

Вы можете изменить изменения по-разному.Изменение содержания модифицированной линии:

@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 THE COPS 
Line 23 
Line 24 
Line 25 

или добавить дополнительную строку:

@@ -19,7 +19,8 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 
+ the cops 
Line 23 
Line 24 
Line 25 

, которые можно упростить, так как она не изменяет строку 22: в малейшей

@@ -19,7 +19,8 @@ Line 18 
Line 19 
Line 20 
Line 21 
Line 22 
+ the cops 
Line 23 
Line 24 
Line 25