Lukas Tenbrink <lukastenbrink@xxxxxxxxx> writes: > Thank you for filling out a Git bug report! > Please answer the following questions to help us understand your issue. > > What did you do before the bug happened? (Steps to reproduce your issue) > > Full reproduction: > > echo "A\nB\nC" > test1 > echo "A\nB\nC\nD\nE\nF" > test2 For many folks, the above will place one line each in these files. For portability, you'd need to do something like printf "%s\n" A B C >test1 printf "%s\n" A B C D E F >test2 > git diff -U0 test1 test2 > The actual output places the new text at line 3: > >> git diff -U0 test1 test2 > diff --git a/test1 b/test2 > index b1e6722..cead32e 100644 > --- a/test1 > +++ b/test2 > @@ -3,0 +4,3 @@ C > +D > +E > +F I think this is very much in line with how "diff -U0" by other people do it, and any tool like "git am" that need to read "diff" output need to understand how these output work correctly; "-U0" output and ",1" that is omitted are things that have confused us tool writers forever ;-). With -U0, you'd get $ diff -U0 test1 test2 --- test1 2023-05-03 14:02:27.718960038 -0700 +++ test2 2023-05-03 14:02:20.094156573 -0700 @@ -3,0 +4,3 @@ +D +E +F which has "-3,0" that says "there were 3 lines before this hunk that did not have any line before the change". This might be unintuitive, but it is specified by POSIX. Open https://pubs.opengroup.org/onlinepubs/9699919799/ and look for "@@". "@@-%s+%s@@", <file1 range>, <file2 range> Each <range> field shall be of the form: "%1d", <beginning line number> or: "%1d,1", <beginning line number> if the range contains exactly one line, and: "%1d,%1d", <beginning line number>, <number of lines> otherwise. If a range is empty, its beginning line number shall be the number of the line just before the range, or 0 if the empty range starts the file. So a patch that adds lines to an empty file would look like $ diff -U0 /dev/null test1 --- /dev/null 2023-04-29 22:24:54.395999895 -0700 +++ test1 2023-05-03 14:02:27.718960038 -0700 @@ -0,0 +1,3 @@ +A +B +C just as specified. Note "-0,0" that says "there was no line before this hunk before this change".