Recently I came across a blog post explaining how to get the history of a deleted file:, which pointed to yet another blog with the simple solution

git log -- deleted_file.txt

However, neither explained exactly why this works, and I got interested. -- is normally the convention that means “pass everything after this into the program as a literal string. For example, if for some crazy reason you had a file named -h (which is perfectly legal), rm -h would just bring up the man page, while rm -- -h would work as expected (as would rm ./-h). However, this is just a convention and git might be free to ignore it.

As the man page actually points out, git does indeed treat these differently:

[--] <path>...
    Show only commits that are enough to explain how the files that match the specified paths came to be. See
    History Simplification below for details and other simplification modes.

    Paths may need to be prefixed with -- to separate them from options or the revision range, when confusion

The short story, according to the History Simplification section, appears to be that the default behavior is able to accurately track changes across moves/renames, but they also needed a way to say “track this exact path only”.