2

我正在尝试使用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 拒绝了这个补丁,说:

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

我不明白:

  • 两者都-+第 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 不喜欢我的第一种方法。

4

1 回答 1

1

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

通过查看git help apply手册中的 -C (上下文)选项,它说“默认情况下不会忽略任何上下文。”。您可以使用 忽略上下文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
于 2013-10-02T22:51:19.123 回答