我有一個大而複雜的git diff。它有大約1200個案例,它刪除了一個包含字符串「fubar」的行(如果有的話,用引號)。我想要做的是應用修補程序,但不要刪除這些行。從git補丁中刪除行而不損壞
我試着從補丁文件中刪除以下表單的每一行。問題是行號是錯誤的,所以補丁已損壞。在編輯行號碼時,我想知道是否有解決問題的方法。
我刪除:
- (whatever here) "fubar" (whatever else here)
我有一個大而複雜的git diff。它有大約1200個案例,它刪除了一個包含字符串「fubar」的行(如果有的話,用引號)。我想要做的是應用修補程序,但不要刪除這些行。從git補丁中刪除行而不損壞
我試着從補丁文件中刪除以下表單的每一行。問題是行號是錯誤的,所以補丁已損壞。在編輯行號碼時,我想知道是否有解決問題的方法。
我刪除:
- (whatever here) "fubar" (whatever else here)
基本上,你必須複製的完整產品線,然後«刪除»的第一個字符(通過在開始一個-
線的替換空間),和「添加」第二個改變(意思是用
+
代替)。在差異中,第一列是有關線路狀態的指標(添加,刪除或未更改)。
的「在行XXX腐敗補丁」可能意味着一個空間丟失,或您刪除行「字面上」,而不是將其標記爲移除(減號-
)
如果你想在補丁不要刪除一條線,您必須在該行的開頭用空格替換-
。在你的補丁中,你會有一條未修改的線路保持在上下文中。
替換:
- (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
一個版本,並在我們的標籤b
版本相同的文件test.txt
;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
意味着它代表a
版本6行,起始於第2行;+2,8
意味着它代表b
版本8行,在行開始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
表示它代表版本爲a
的8行,從第10行開始;+12,6
意味着它代表b
版本6行,開始於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
什麼commad你鍵入? 'git apply'?你可以粘貼你輸入的完整命令(以及你嘗試應用的更完整的補丁文件)嗎?你熟悉'git add -p'命令 – Asenar
該死的,版本太晚了-_-你的錯誤信息是什麼? – Asenar
損壞的修補程序xxx行 –