Incorrect behavior from git checkout --patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux