编辑Git补丁时出现“您编辑的块不适用”的错误提示。

13

我正在交互式地添加一个文件:

git add ../../template/panels/panel-reports.php -p
diff --git a/template/panels/panel-reports.php b/template/panels/panel-reports.php
index 5482228..48d2901 100644
--- a/template/panels/panel-reports.php
+++ b/template/panels/panel-reports.php
@@ -214,6 +214,8 @@

                        <a class="addCategory"></a>
                        <a class="removeCategory"></a>
+                       <a class="addDocument"></a>
+                       <a class="checkTool"></a>

                        <div class="categoriesList"></div>
                        <div class="documentsList"></div>
Stage this hunk [y,n,q,a,d,/,e,?]? e

注:这里只有这些修改过的行。

我想要移除

+                       <a class="checkTool"></a>

那么我像这样编辑:

# Manual hunk edit mode -- see bottom for a quick guide
@@ -214,6 +214,7 @@

                                                <a class="addCategory"></a>
                                                <a class="removeCategory"></a>
+                                               <a class="addDocument"></a>

                                                <div class="categoriesList"></div>
                                                <div class="documentsList"></div>
# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.

但是 Git 拒绝了它:

error: patch failed: template/panels/panel-reports.php:214
error: template/panels/panel-reports.php: patch does not apply
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]? 

我认为我写的内容没有错误或歧义,那么我错在哪里了吗?


5
请确保每个上下文行都以一个前导空格字符' '开头,即使该行在其他情况下为空。 - Yann Droneaud
3
请浏览一下这个问题 - simont
2个回答

17

ydroneaud的评论是我正在寻找的答案。

许多文本编辑器在保存时会剪切末尾的空格,请注意这一点。

第二件事,当删除“-”以保持一行时,请实际上用空格“ ”来替换它,而不是只删除它。

最后一件事,不要调整顶部@@ @@中的数字。


2
如果行数发生变化,您必须在@@ @@顶部调整行号。 - Niklas R
5
从Git版本2.11.0开始,您无需调整@@ @@顶部的行号,因为对未修改的行进行更改必须在实际代码中而不是在交互模式手动编辑中进行。 Git交互模式将自行处理已修改的行的调整。 - Eido95
2
对我来说关键词是_replace_。我只是删除了“-”字符(而不是整行),然后补丁也无法应用。删除“-”并添加一个空格就解决了问题。 - Johan Persson
1
与Johan Persson完全相同,也无需编辑标题块编号。 - Barbz_YHOOL

1

我的最新版本 Git,2.33.1.windows.1,git add -p 没有子命令 s,所以我使用了 e

错误 您编辑的块无法应用 是因为我误解了其底部提示:

# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
https://git-scm.com/docs/git-add#_editing_patches提供了更详细的介绍:

添加的内容

添加的内容以“+”开头。您可以通过删除它们来防止暂存任何添加行。(删除行,不是 "+" 标记。)

删除的内容

删除的内容以“-”开头。您可以通过将“-”转换为“ ”(空格)来防止暂存其删除。(将“-”标记替换为“ ”空格标记)

修改的内容

修改的内容由“-”行(删除旧内容)和“+”行(添加替换内容)组成。您可以通过将“-”行转换为“ ”,并删除“+”行来防止暂存修改。请注意,仅修改一半可能会向索引引入混淆的更改。(前两种方法的结合)

仅此而已! 不需要修改 @@ @@ 之间的数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接