On Fri, Feb 22 2019, Robert P. J. Day wrote:
> was perusing the git FAQ and ran across this:
>
> How do I obtain a list of files which have changed in a given commit?
>
> $ git diff --name-only <commit>^!
>
>
> after playing with "git rev-parse", i figured out that the above was
> equivalent to (using kernel "v4.19" tag as an example):
>
> $ git diff v4.19 ^v4.19^
> diff --git a/Makefile b/Makefile
> index bf3786e4ffec..69fa5c0310d8 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2,8 +2,8 @@
> VERSION = 4
> PATCHLEVEL = 19
> SUBLEVEL = 0
> -EXTRAVERSION = -rc8
> -NAME = Merciless Moray
> +EXTRAVERSION =
> +NAME = "People's Front"
>
> # *DOCUMENTATION*
> # To see a list of typical targets execute "make help"
> $
>
> but i get exactly the same output if i reverse the arguments:
>
> $ git diff ^v4.19^ v4.19
> diff --git a/Makefile b/Makefile
> index bf3786e4ffec..69fa5c0310d8 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2,8 +2,8 @@
> VERSION = 4
> PATCHLEVEL = 19
> SUBLEVEL = 0
> -EXTRAVERSION = -rc8
> -NAME = Merciless Moray
> +EXTRAVERSION =
> +NAME = "People's Front"
>
> # *DOCUMENTATION*
> # To see a list of typical targets execute "make help"
>
> so i'm confused as to how to "git diff" interprets and processes
> those two arguments, as "v4.19" is, of course, a reference to a
> specific commit, but "^v4.19^" appears to define all those commits not
> reachable from "v4.19^". how should one read this?
I'm not sure if it answers your question, but search for "Jon Loeliger"
in "man git-rev-parse". It shows an example of a graph and what the ^REV
syntax means.
^v4.19^ looks cutsey, but just means:
first_parent_of_v4.19_is_X = v4.19^
not_reachable_from_X = ^$first_parent_of_v4.19_is_X