From: Junio C Hamano <gitster@pobox.com>
To: Michael J Gruber <git@drmicha.warpmail.net>
Cc: git@vger.kernel.org, Jacob Keller <jacob.keller@gmail.com>
Subject: Re: [PATCH] Documentation/git-diff: document git diff with 3+ commits
Date: Wed, 26 Oct 2016 11:11:52 -0700 [thread overview]
Message-ID: <xmqqh97zask7.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <07712c2c94670ca4d91ef78cd7d3602a8d36b0c1.1477472970.git.git@drmicha.warpmail.net> (Michael J. Gruber's message of "Wed, 26 Oct 2016 11:11:14 +0200")
Michael J Gruber <git@drmicha.warpmail.net> writes:
> That one is difficult to discover but super useful, so document it:
> Specifying 3 or more commits makes git diff switch to combined diff.
>
> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> ---
>
> Notes:
> Note that we have the following now:
> ...
> 'git diff A..B' equivalent to 'git diff A B'
> in contrast to 'git log A..B' listing commits between M and B only
> (without the commits between M and A unless they are "in" B).
The standard answer is:
Do not use two-dot form with 'git diff', if you find it
confusing. Diff is about two endpoints, not about a range
between two.
The reason why we do not reject can be easily guessed by any
intelligent person when some historical background is given, I
think.
- In the beginning A...B did not exist. A..B was the only "range"
notation.
- "git log A..B" was in wide use. Remember, "git log A...B" did
not exist.
- People started mistyping "git diff A..B", which looked as if the
user typed "git diff ^A B" to the internal.
- Git _could_ have rejected that as a bogus request to diff two
points, ^A (what is that???) and B, but "What else could the user
have meant with 'git diff A..B' other than 'git diff A B'?" was
an argument to favor doing _something_ useful rather than
erroring out. Remember, "A...B" did not exist when this
happened.
So there. We may want to deprecate "diff A..B" but I personally do
not think it is worth the effort. There is no substitute for the
current "diff A...B" to allow us to deprecate both at the same time,
which is the required first step if we want to eventually swap their
meaning in a far future version of Git which would have been better
if we had hindsight. But remember, "A...B" did not exist back then.
> diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
> index bbab35fcaf..2047318a27 100644
> --- a/Documentation/git-diff.txt
> +++ b/Documentation/git-diff.txt
> @@ -12,6 +12,7 @@ SYNOPSIS
> 'git diff' [options] [<commit>] [--] [<path>...]
> 'git diff' [options] --cached [<commit>] [--] [<path>...]
> 'git diff' [options] <commit> <commit> [--] [<path>...]
> +'git diff' [options] <commit> <commit> <commit> [<commit>...]
Made me wonder "is [<A>...] 0-or-more As or 1-or-more As?".
Don't we allow pathspecs in this case?
> 'git diff' [options] <blob> <blob>
> 'git diff' [options] [--no-index] [--] <path> <path>
>
> @@ -75,9 +76,16 @@ two blob objects, or changes between two files on disk.
> "git diff $(git-merge-base A B) B". You can omit any one
> of <commit>, which has the same effect as using HEAD instead.
>
> +'git diff' [options] <commit> <commit> <commit> [<commit>...]::
> +
> + This is to view a combined diff between the first <commit>
> + and the remaining ones, just like viewing a combined diff
> + for a merge commit (see below) where the first <commit>
> + is the merge commit and the remaining ones are the parents.
> +
> Just in case if you are doing something exotic, it should be
> noted that all of the <commit> in the above description, except
> -in the last two forms that use ".." notations, can be any
> +in the two forms that use ".." notations, can be any
> <tree>.
>
> For a more complete list of ways to spell <commit>, see
next prev parent reply other threads:[~2016-10-26 18:12 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-21 21:40 generating combined diff without an existing merge commit Jacob Keller
2016-10-21 22:01 ` Jacob Keller
2016-10-21 22:41 ` Junio C Hamano
2016-10-21 22:54 ` Jacob Keller
2016-10-26 9:11 ` [PATCH] Documentation/git-diff: document git diff with 3+ commits Michael J Gruber
2016-10-26 18:11 ` Junio C Hamano [this message]
2016-10-27 9:27 ` Michael J Gruber
2016-10-27 18:40 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh97zask7.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).