为什么这个补丁不适用?

时间:2013-09-02 03:23:14

标签: git

我正在尝试使用git add -p来对索引进行特定的更改。

这是Git建议的大块头:

@@ -7,8 +7,15 @@
     <title>{{ page.title }}</title>
     <link rel="stylesheet" href="/css/style.css">
   </head>
-  <body>
-    <div class="content container">
+
+  <body class="container">
+    <ul class="navigation">
+      {% if page.url != '/index.html' %}
+      <li><a href="/">Home</a></li>
+      {% endif %}
+    </ul>
+
+    <div class="content">
       {{ content }}
     </div> 
   </body>

这是我尝试编辑该补丁:

@@ -7,5 +7,5 @@                                                                                                                                                                                                                                
     <title>{{ page.title }}</title>                                                                                                                                                                                                           
     <link rel="stylesheet" href="/css/style.css">                                                                                                                                                                                             
   </head>                                                                                                                                                                                                                                     
-  <body>                                                                                                                                                                                                                                      
-    <div class="content container">                                                                                                                                                                                                           
+                                                                                                                                                                                                                                              
+  <body class="container">   

Git拒绝这个补丁,说:

  

您编辑的大块不适用。再次编辑(说“不”丢弃!)[是/否]?

我不明白:

  • -+都从第7行开始
  • -+都会继续5行

当我查看原始文件(下面),并在心理上尝试应用我建议的补丁时,它似乎有意义。怎么了?

供参考,这是整个原始文件:

  1 <!DOCTYPE html>                                                                                                                                                                                                                            
  2 <html lang="en">                                                                                                                                                                                                                           
  3   <head>                                                                                                                                                                                                                                   
  4     <meta charset="utf-8">                                                                                                                                                                                                                 
  5     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">                                                                                                                                                                         
  6     <meta name="viewport" content="width=device-width, initial-scale=1.0">                                                                                                                                                                 
  7     <title>{{ page.title }}</title>                                                                                                                                                                                                        
  8     <link rel="stylesheet" href="/css/style.css">                                                                                                                                                                                          
  9   </head>                                                                                                                                                                                                                                  
 10   <body>                                                                                                                                                                                                                                   
 11     <div class="content container">                                                                                                                                                                                                        
 12       {{ content }}                                                                                                                                                                                                                        
 13     </div>                                                                                                                                                                                                                                 
 14   </body>                                                                                                                                                                                                                                  
 15 </html>  

此外,这是我写的一个补丁,Git没有抱怨:

@@ -7,8 +7,9 @@
     <title>{{ page.title }}</title>
     <link rel="stylesheet" href="/css/style.css">
   </head>
-  <body>
-    <div class="content container">
+
+  <body class="container">
+    <div class="content">
       {{ content }}
     </div> 
   </body>

在某些方面它实际上是一个更好的补丁,但我想理解为什么Git不喜欢我的第一种方法。

1 个答案:

答案 0 :(得分:1)

补丁中确实需要上下文,至少在默认情况下是这样。通过删除底部上下文,补丁说明更改是文件的最后一行。

通过查看-C(上下文)选项中的git help apply手册,它说“默认情况下不会忽略任何上下文。”。您可以忽略git apply -C0 my.patch的上下文,但当然这对您正在进行的交互式编辑没有帮助,因为它似乎使用默认值。

进一步阅读git help add我注意到一个名为“编辑补丁”的部分,其中包含以下段落,最后说明了所有内容:

There are also several operations which should be avoided entirely,
as they will make the patch impossible to apply:

   ·   adding context (" ") or removal ("-") lines

   ·   deleting context or removal lines

   ·   modifying the contents of context or removal lines