我正在尝试将更改拆分为多个提交,但在手动编辑大块时我遇到了问题。
原创大块:
@@ -116,8 +116,8 @@
context
context
- remove 1
- remove 2
- remove 3
+ add 1
+ add 2
+ add 3
context
context
context
我只希望发生'删除1'和'删除2'的更改才能上演。换句话说,我需要将“删除3”排除在提交之外。
我试过了:
@@ -116,4 +116,4 @@
context
context
- remove 1
- remove 2
+ add 1
+ add 2
但它不断输出补丁不适用。我只删除了最后一个上下文行和'删除3'和'添加3'行。我编辑了大块范围并减去了4个被排除的行(3个是上下文1是变化,1个被删除,1个被添加)
我使用了2个不同的编辑器,'nano'和'sublime text',两者都有相同的结果。我确保没有没有注释掉的空行。
我做错了什么?
答案 0 :(得分:0)
我做错了什么?
嗯,你正在手工编辑补丁文件,这似乎是一件奇怪的事情......
据我所知,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
答案 1 :(得分:0)
当git应用补丁时,它会查看前导和尾随上下文行。当大块中没有前导上下文行时,大块必须应用于前映像的开头(更改前的文件版本)。同样,没有尾随上下文意味着hunk被锚定在最后。
由于你已经删除了尾随的上下文行(并且最后不应该使用hunk),因此该补丁不会适用。