Git 补丁 - 补丁不适用
Git patch - patch does not apply
我正在尝试将更改拆分为多个提交,但我在手动编辑大块时遇到问题。
原版帅哥:
@@ -116,8 +116,8 @@
context
context
- remove 1
- remove 2
- remove 3
+ add 1
+ add 2
+ add 3
context
context
context
我只想上演发生在 'remove 1' 和 'remove 2' 上的变化。换句话说,我需要 'remove 3' 从提交中排除。
我试过这个:
@@ -116,4 +116,4 @@
context
context
- remove 1
- remove 2
+ add 1
+ add 2
但是一直输出补丁不适用。我只删除了最后的上下文行以及 'remove 3' 和 'add 3' 行。我编辑了 hunk 范围并减去 4 个排除的行(3 个是上下文 1 个是更改,1 个删除和 1 个添加)
我使用了 2 个不同的编辑器,'nano' 和 'sublime text',两者的结果相同。我确保没有未注释掉的空行。
我做错了什么?
What am I doing wrong?
好吧,您正在手动编辑补丁文件,这似乎是一件奇怪的事情...
据我所知,git
需要补丁中的尾随上下文。例如,如果我从一个如下所示的文件开始:
the
quick
brown
fox
jumped
over
the
lazy
dog
我有这样的补丁:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,9 +1,9 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
lazy
dog
毫无问题地适用:
$ git apply mypatch
如果我删除该补丁中的尾随上下文(并更新行
数字),给我这个:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,6 +1,6 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
然后git
将拒绝应用补丁:
$ git apply diff
error: patch failed: file1:1
error: file1: patch does not apply
如果我添加一行尾随上下文,它会起作用:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,7 +1,7 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
当 git 应用补丁时,它会同时查看前导和尾随上下文行。当 hunk 中没有前导上下文行时,hunk 必须在原映像(更改前的文件版本)的开头应用。同样,没有尾随上下文意味着大块头锚定在最后。
由于您删除了尾随的上下文行(并且大块头不应该在最后被锚定),补丁将不适用。
我正在尝试将更改拆分为多个提交,但我在手动编辑大块时遇到问题。
原版帅哥:
@@ -116,8 +116,8 @@
context
context
- remove 1
- remove 2
- remove 3
+ add 1
+ add 2
+ add 3
context
context
context
我只想上演发生在 'remove 1' 和 'remove 2' 上的变化。换句话说,我需要 'remove 3' 从提交中排除。
我试过这个:
@@ -116,4 +116,4 @@
context
context
- remove 1
- remove 2
+ add 1
+ add 2
但是一直输出补丁不适用。我只删除了最后的上下文行以及 'remove 3' 和 'add 3' 行。我编辑了 hunk 范围并减去 4 个排除的行(3 个是上下文 1 个是更改,1 个删除和 1 个添加)
我使用了 2 个不同的编辑器,'nano' 和 'sublime text',两者的结果相同。我确保没有未注释掉的空行。
我做错了什么?
What am I doing wrong?
好吧,您正在手动编辑补丁文件,这似乎是一件奇怪的事情...
据我所知,git
需要补丁中的尾随上下文。例如,如果我从一个如下所示的文件开始:
the
quick
brown
fox
jumped
over
the
lazy
dog
我有这样的补丁:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,9 +1,9 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
lazy
dog
毫无问题地适用:
$ git apply mypatch
如果我删除该补丁中的尾随上下文(并更新行 数字),给我这个:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,6 +1,6 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
然后git
将拒绝应用补丁:
$ git apply diff
error: patch failed: file1:1
error: file1: patch does not apply
如果我添加一行尾随上下文,它会起作用:
diff --git a/file1 b/file1
index 4a3cebe..30f5937 100644
--- a/file1
+++ b/file1
@@ -1,7 +1,7 @@
the
quick
brown
-fox
-jumped
-over
+ostrich
+shouted
+at
the
当 git 应用补丁时,它会同时查看前导和尾随上下文行。当 hunk 中没有前导上下文行时,hunk 必须在原映像(更改前的文件版本)的开头应用。同样,没有尾随上下文意味着大块头锚定在最后。
由于您删除了尾随的上下文行(并且大块头不应该在最后被锚定),补丁将不适用。