Git补丁-补丁不适用

Ale*_*erg 5 git git-add git-patch

我试图将更改分为几个提交,但是在手动编辑块时遇到了一个问题。

原始大块头:

@@ -116,8 +116,8 @@
        context
        context
-           remove 1
-           remove 2
-           remove 3
+           add 1
+           add 2
+           add 3
        context
        context
        context
Run Code Online (Sandbox Code Playgroud)

我只希望上演“删除1”和“删除2”所发生的更改。换句话说,我需要将“删除3”从提交中排除。

我尝试了这个:

@@ -116,4 +116,4 @@
            context
            context
-           remove 1
-           remove 2
+           add 1
+           add 2
Run Code Online (Sandbox Code Playgroud)

但是它一直输出不适用的补丁。我只删除了最后的上下文行,并“删除了3”和“添加3”行。我编辑了大块的范围并减去了4条排除的行(其中3条是上下文1是更改,1条已删除和1条添加)

我使用了两个不同的编辑器,“ nano”和“ sublime text”,它们的结果相同。我确保没有被注释掉的空行。

我究竟做错了什么?

lar*_*sks 0

我究竟做错了什么?

好吧,您正在手动编辑补丁文件,这似乎是一件奇怪的事情......

据我所知,git需要补丁中的尾随上下文。例如,如果我从一个如下所示的文件开始:

the
quick
brown
fox
jumped
over
the
lazy
dog
Run Code Online (Sandbox Code Playgroud)

我有一个这样的补丁:

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
Run Code Online (Sandbox Code Playgroud)

这毫无问题地适用:

$ git apply mypatch
Run Code Online (Sandbox Code Playgroud)

如果我删除该补丁中的尾随上下文(并更新行号),则给出以下内容:

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
Run Code Online (Sandbox Code Playgroud)

然后git将拒绝应用补丁:

$ git apply diff
error: patch failed: file1:1
error: file1: patch does not apply
Run Code Online (Sandbox Code Playgroud)

如果我添加一行尾随上下文,它就会起作用:

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
Run Code Online (Sandbox Code Playgroud)

  • 我没有手动编辑补丁,而是以交互方式暂存文件中的内容。我猜一定有一个尾随上下文行。 (2认同)