Git错误:"致命:第36行的腐败补丁"

was*_*sup 15 git git-gui

我有一个Java文件,结尾如下:

    }
}
Run Code Online (Sandbox Code Playgroud)

我前段时间错误地删除了换行符,但直到今天我收到Git-GUI的错误消息时才很好

fatal: corrupt patch at line 36
Run Code Online (Sandbox Code Playgroud)

我尝试添加缺少的换行符,但Git似乎无法正确处理它:

在添加换行符之前:

     }
 }
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)

添加换行符后:

     }
-}
\ No newline at end of file
+}
Run Code Online (Sandbox Code Playgroud)

它仍然给我这个错误.

我尝试恢复更改并仅添加换行而不对文件进行其他更改,但它也没有帮助.

编辑:添加两个甚至三个换行也没有用.

EDIT2:仅当在最后一个块中提交行时才会发生此错误.

Eug*_*kov 14

编辑' - '行时会发生这种情况.
当你删除' - '并忘记添加''(空格)而不是它

打开你的补丁并检查你想要保持不变的所有行都以''(空格)开头

UPDATE

您的编辑器也可以选择:"删除行尾的空格".因此,当您在编辑器中保存补丁时:

-Line with space at end <--- NOTICE: Here there is one space at the end
+Line with no space at end<--- Here there's no space
Run Code Online (Sandbox Code Playgroud)

您的编辑器将删除尾随空格和补丁变为如下所示:

-Line with space at end<--- Here no space. Patch will FAIL!!!
+Line with no space at end<--- Here no space also
Run Code Online (Sandbox Code Playgroud)

此补丁将失败,因为源文件没有行:

-Line with space at end<---
Run Code Online (Sandbox Code Playgroud)

相反,它有:

-Line with space at end <--- 
Run Code Online (Sandbox Code Playgroud)

  • 哇,好像添加一条带有空格的额外行就可以应用我的补丁了 (3认同)

小智 6

另一个潜在的问题,特别是在使用常规文本编辑器进行编辑时,无法处理大块开头的数字,这些数字表示旧代码中有多少行,新代码中有多少行,以及在哪里它从每个开始。如果数字不匹配,则会出现错误fatal: corrupt patch at line x

例如,@@ -32,9 +54,15 @@告诉它在原始文件中的第 32 行和接下来的 9 行中查找要替换的代码,但在编辑后的文件中从第 54 行开始有 15 行。如果添加或删除任何行,您将我也必须编辑这些数字。

虽然我没有对此做过任何真正的研究,也没有使用过 git gui,但可以想象,由于不以换行符结尾的行在技术上不是根据某些标准的行,因此您需要更改以下一项或两项将这些数字加一以使其正确应用。


was*_*sup 0

我尝试像平常一样添加和提交,但没有 Git-GUI,使用命令行,并且它有效。

  • 它没有回答问题出在哪里以及为什么解决 (4认同)