Hi Dave
Thanks for the bug report. I've tried to reproduce it on the latest
master, version 2.22.0 and 2.20.1 and am unable to do so. I thought it
might be related to a bug I recently fixed[1] but it does not appear to
be. I've appended the files I used below just in case I made a mistake
translating your patches to files that can be used with git checkout.
Best Wishes
Phillip
[1]
https://github.com/git/git/commit/1b074e15d0f976be2bc14f9528874a841c055213#diff-588be9a03d1f7e33db12f186aad5fde9
pre-image
block_one {
line 1
line 2
line 3
2 4 6 8
line 4
line 5
line 6
2 4 6 8
line 7
line 8
line 9
2 4 6 8
line 10
line 11
line 12
}
block_two {
line 1
line 2
line 3
2 5 6 9
line 4
line 5
line 6
2 5 6 9
line 7
line 8
line 9
2 5 6 9
line 10
line 11
line 12
}
post-image
block_one {
line 1
line 1.5
line 2
line 2.5
line 3
2 4 6 8
line 4
line 4.5
line 5
line 5.5
line 6
2 4 6 8
line 7
line 7.5
line 8
line 8.5
line 9
2 4 6 8
line 10
line 10.5
line 11
line 11.5
line 12
}
block_two {
line 1
line 1.5
line 2
line 2.5
line 3
2 5 6 9
line 4
line 4.5
line 5
line 5.5
line 6
2 5 6 9
line 7
line 7.5
line 8
line 8.5
line 9
2 5 6 9
line 10
line 10.5
line 11
line 11.5
line 12
}
On 10/08/2019 21:12, Dave Kaminski wrote:
I am observing git checkout --patch making changes to the wrong lines of a file.
This is with a clean install of git version 2.20.1 on a debian docker
container (image tag 10.0 which is also "latest" as of this writing).
With a diff that looks like the following:
diff --git a/file.txt b/file.txt
index 868aa22..ea4d786 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
block_one {
line 1
+line 1.5
line 2
+line 2.5
line 3
2 4 6 8
line 4
+line 4.5
line 5
+line 5.5
line 6
2 4 6 8
line 7
+line 7.5
line 8
+line 8.5
line 9
2 4 6 8
line 10
+line 10.5
line 11
+line 11.5
line 12
}
block_two {
line 1
+line 1.5
line 2
+line 2.5
line 3
-2 5 6 9
+2 4 6 8
line 4
+line 4.5
line 5
+line 5.5
line 6
-2 5 6 9
+2 4 6 8
line 7
+line 7.5
line 8
+line 8.5
line 9
-2 5 6 9
+2 4 6 8
line 10
+line 10.5
line 11
+line 11.5
line 12
}
doing a `git checkout --patch -- ./file.txt`, splitting the diff into
hunks, and discarding all of the hunks that begin with numbers, e.g.
@@ -22,3 +32,3 @@
line 3
-2 5 6 9
+2 4 6 8
line 4
the expected state of the file in the working directory is this:
diff --git a/file.txt b/file.txt
index 868aa22..9ab67a1 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
block_one {
line 1
+line 1.5
line 2
+line 2.5
line 3
2 4 6 8
line 4
+line 4.5
line 5
+line 5.5
line 6
2 4 6 8
line 7
+line 7.5
line 8
+line 8.5
line 9
2 4 6 8
line 10
+line 10.5
line 11
+line 11.5
line 12
}
block_two {
line 1
+line 1.5
line 2
+line 2.5
line 3
2 5 6 9
line 4
+line 4.5
line 5
+line 5.5
line 6
2 5 6 9
line 7
+line 7.5
line 8
+line 8.5
line 9
2 5 6 9
line 10
+line 10.5
line 11
+line 11.5
line 12
}
but instead the actual state of the file is this:
diff --git a/file.txt b/file.txt
index 868aa22..76fe65d 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
block_one {
line 1
+line 1.5
line 2
+line 2.5
line 3
2 4 6 8
line 4
+line 4.5
line 5
+line 5.5
line 6
2 4 6 8
line 7
+line 7.5
line 8
+line 8.5
line 9
-2 4 6 8
+2 5 6 9
line 10
+line 10.5
line 11
+line 11.5
line 12
}
block_two {
line 1
+line 1.5
line 2
+line 2.5
line 3
2 5 6 9
line 4
+line 4.5
line 5
+line 5.5
line 6
2 5 6 9
line 7
+line 7.5
line 8
+line 8.5
line 9
-2 5 6 9
+2 4 6 8
line 10
+line 10.5
line 11
+line 11.5
line 12
}
See the changes between "line 9" and "line 10" in both blocks that are
not correct.