On 5/17/2024 12:00 PM, Junio C Hamano wrote:
Nathan Faulkner <natedogith1@xxxxxxxxx> writes:
The documentation for --name-only says "Show only names of changed
files." I would interpret this to mean "output the names of all files
that changed", not "output the names of all files that changed, unless
git detected it as renamed".
Interesting observation, but we do show renamed files no? Even when
there is no content changes? A quick experiment tells me it does,
so "unless" is not quite correct.
It seems to me it's not showing the names of all files. If a file was
created and a separate file was deleted, but git happens to detect it as
a rename, it will only show the created file even though from my
perspective both files changed.
Though even for a true rename, I'd have expected --name-only to show all
paths that changed (what you want if you're trying to find code owners
or determine what needs to be rebuilt).
diff --git c/Documentation/diff-options.txt w/Documentation/diff-options.txt
index 0e9456957e..b9eaea32d9 100644
--- c/Documentation/diff-options.txt
+++ w/Documentation/diff-options.txt
@@ -329,7 +329,8 @@ explained for the configuration variable `core.quotePath` (see
linkgit:git-config[1]).
--name-only::
- Show only names of changed files. The file names are often encoded in UTF-8.
+ Show only the name in the before-tree of changed files.
+ The file names are often encoded in UTF-8.
For more information see the discussion about encoding in the linkgit:git-log[1]
manual page.
That description sounds to me like it only shows files that existed in
the from-commit, not any files that were created in the to-commit.
If the description is updated, it'd probably be a good idea to
explicitly call out that --no-renames can be used to get the expected
behavior of showing all files that changed.
This behavior can also lead to a situation where git diff --name-only
stops reporting a file as changed when including a newer commit that
doesn't involve the file.
$ echo '{}' > foo.json; git add .; git commit -m foo
$ rm foo.json; git add .; git commit -m delete
$ echo '{}' > bar.json; git add .; git commit -m bar
$ git diff --name-only HEAD~2 HEAD~1
foo.json
$ git diff --name-only HEAD~1 HEAD
bar.json
$ git diff --name-only HEAD~2 HEAD
bar.json