gpt4 book ai didi

git - 从 git patch 中删除行而不损坏

转载 作者:太空狗 更新时间:2023-10-29 14:05:01 24 4
gpt4 key购买 nike

我有一个大而复杂的 git diff。它有大约 1200 个案例,其中删除了包含字符串“fubar”的行(如果重要的话,带引号)。我想要做的是应用补丁,但不要删除这些行。

我尝试从补丁文件中删除以下表格的每一行。问题是行号错误,因此补丁已损坏。除了编辑行号,我想知道是否有解决该问题的明智方法。

我删除的内容:

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

最佳答案

如果你想让补丁不删除一行,你必须替换-在行的开头一个空格。在你的补丁中,你有一个未修改的行,保留在那里作为上下文。

替换:

- (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.5Line 4.6 ,我们可以从 + 中看到行:

+Line 4.5
+Line 4.6

请注意为上下文显示的其他未修改行如何以空格开头以将它们标记为上下文行。

如果你想修改你的补丁不添加Line 4.6 , 你必须删除相应的 +线。但是您还必须更正 hunk 中的行数,因为您只添加了一行,所以最终得到 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 行开始,因为前一个 hunk 添加了两行。通常,您必须调整 1211因为您现在只在前一个大块中添加一行,但实际上您不需要这样做,因为上下文行有助于识别被修改的实际行。

现在如果你不想删除第 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 22Line 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

关于git - 从 git patch 中删除行而不损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37432432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com