我有一个庞大而复杂的git diff。它有大约1200个案例,它删除了一行包含字符串" fubar" (带引号,如果重要的话)。我想要做的是应用补丁,但不要删除这些行。
我尝试从补丁文件中删除以下表单的每一行。问题是然后行号是错误的,因此补丁已损坏。如果没有编辑行号,我想知道是否有一个理智的解决问题。
我删除了什么:
- (whatever here) "fubar" (whatever else here)
答案 0 :(得分:3)
如果您希望修补程序不删除行,则必须用行空格替换行开头的-
。在你的补丁中,你有一条未经修改的行,可以保留上下文。
替换:
- (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
表示它代表版本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
答案 1 :(得分:0)
基本上,您必须复制整行,然后“删除”第一个字符(通过用替换行开头的空格
-
)和«添加»第二个有变化(意味着用替换
+
)。在diff中,第一列是关于行状态的指示符(添加,删除或未更改)。
“第xxx行的损坏补丁”可能意味着空格丢失,或者您“逐字地”删除了一行,而不是将其标记为删除(使用减号-
)