git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 4/8] doc: give headings for the two and three dot notations

From
Marc Branchaud <marcnarc@xiplink.com>
Date
Jul 21, 2016, 21:20 UTC
Message-ID
<57913C97.1030001@xiplink.com>
In-Reply-To
<9B0B8E2D61D34BFEB8FC3F30EB23437C@PhilipOakley>
On 2016-07-21 03:54 PM, Philip Oakley wrote:
Show 99 quoted lines
> From: "Marc Branchaud" <marcnarc@xiplink.com>
>> On 2016-07-20 05:10 PM, Philip Oakley wrote:
>>> While there, also break out the other shorthand notations and
>>> add a title for the revision range summary (which also appears
>>> in git-rev-parse, so keep it mixed case).
>>>
>>> Signed-off-by: Philip Oakley <philipoakley@iee.org>
>>> ---
>>>   Documentation/revisions.txt | 58
>>> ++++++++++++++++++++++++++++-----------------
>>>   1 file changed, 36 insertions(+), 22 deletions(-)
>>>
>>> diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
>>> index 6e9cd41..5b37283 100644
>>> --- a/Documentation/revisions.txt
>>> +++ b/Documentation/revisions.txt
>>> @@ -242,35 +242,49 @@ specifying a single revision with the notation
>>> described in the
>>>   previous section means the set of commits reachable from that
>>>   commit, following the commit ancestry chain.
>>>
>>> -To exclude commits reachable from a commit, a prefix '{caret}'
>>> -notation is used.  E.g. '{caret}r1 r2' means commits reachable
>>> -from 'r2' but exclude the ones reachable from 'r1'.
>>> -
>>> -This set operation appears so often that there is a shorthand
>>> -for it.  When you have two commits 'r1' and 'r2' (named according
>>> -to the syntax explained in SPECIFYING REVISIONS above), you can ask
>>> -for commits that are reachable from r2 excluding those that are
>>> reachable
>>> -from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
>>> -
>>> -A similar notation 'r1\...r2' is called symmetric difference
>>> -of 'r1' and 'r2' and is defined as
>>> -'r1 r2 --not $(git merge-base --all r1 r2)'.
>>> -It is the set of commits that are reachable from either one of
>>> -'r1' (left side) or 'r2' (right side) but not from both.
>>> -
>>> -In these two shorthands, you can omit one end and let it default to
>>> HEAD.
>>> +Commit Exclusions
>>> +~~~~~~~~~~~~~~~~~
>>> +
>>> +'{caret}<rev>' (caret) Notation::
>>> + To exclude commits reachable from a commit, a prefix '{caret}'
>>> + notation is used.  E.g. '{caret}r1 r2' means commits reachable
>>> + from 'r2' but exclude the ones reachable from 'r1'.
>>> +
>>> +Dotted Range Notations
>>> +~~~~~~~~~~~~~~~~~~~~~~
>>> +
>>> +The '..' (two-dot) Range Notation::
>>> + The '{caret}r1 r2' set operation appears so often that there is a
>>> shorthand
>>> + for it.  When you have two commits 'r1' and 'r2' (named according
>>> + to the syntax explained in SPECIFYING REVISIONS above), you can ask
>>> + for commits that are reachable from r2 excluding those that are
>>> reachable
>>> + from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
>>> +
>>> +The '...' (three dot) Symmetric Difference Notation::
>>> + A similar notation 'r1\...r2' is called symmetric difference
>>
>> s/called/called the/
>
> The wording is the original ;-) Can change.
>
>>
>>> + of 'r1' and 'r2' and is defined as
>>> + 'r1 r2 --not $(git merge-base --all r1 r2)'.
>>> + It is the set of commits that are reachable from either one of
>>> + 'r1' (left side) or 'r2' (right side) but not from both.
>>> +
>>> +In these two shorthand notations, you can omit one end and let it
>>> default to HEAD.
>>>   For example, 'origin..' is a shorthand for 'origin..HEAD' and asks
>>> "What
>>>   did I do since I forked from the origin branch?"  Similarly,
>>> '..origin'
>>>   is a shorthand for 'HEAD..origin' and asks "What did the origin do
>>> since
>>>   I forked from them?"  Note that '..' would mean 'HEAD..HEAD' which
>>> is an
>>>   empty range that is both reachable and unreachable from HEAD.
>>>
>>> -Two other shorthands for naming a set that is formed by a commit
>>> -and its parent commits exist.  The 'r1{caret}@' notation means all
>>> -parents of 'r1'.  'r1{caret}!' includes commit 'r1' but excludes
>>> -all of its parents.
>>> +Special '<rev>{caret}' Shorthand Notations
>>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Sorry, but this header also does not render properly in the man page.
>> Maybe just "Special {caret} Shorthand Notations"?  (But read on!)
>
> rendered fine on the MYS2 man invocation - I had had to add the <rev>
> prefix to the quoted title to make it work.
>
> What went wrong for you? (I'll read on)

Only the word "Special" is emphasized (in bold). The rest of the header is plain.

I'm using asciidoc 8.6.9, so I'm likely suffering from the bug Peff identified.

Show 18 quoted lines
>>
>>> +Two other shorthands exist, particularly useful for merge commits, is
>>> +for naming a set that is formed by a commit and its parent commits.
>>>
>>> -To summarize:
>>> +The 'r1{caret}@' notation means all parents of 'r1'.
>>> +
>>> +'r1{caret}!' includes commit 'r1' but excludes all of its parents.
>>
>> My immediate thought upon reading this is "Why not just use 'r1'?"  I
>> think the answer is "This truncates the range."  So, for example, "git
>> log r1" shows you r1 and its ancestors, while "git log r1^!" only
>> shows you r1.  I think you should add this example, or something similar.
>>
>
> I'd also asked that question in one of my replies earlier $gmane/299849.
> I was then able to determine that it was a width wide 'range' covering
> multi-parent situations.

Obviously, I see it more an anti-range. You're never going to get more than a single commit with this notation.

> Identifying an example could be good if it was succinct and explanatory.
What do you think of my example?
Show 16 quoted lines
> $ git rev-parse 6c71a849^!
>> But, really, this means that the notation is another "Commit
>> Exclusion" and properly belongs in that section.
>
> I think it's bigger than that.
>>
>> That makes this "Special Notations" section rather thin.  I suggest
>> moving a slightly expanded <rev>^@ description to a small subsection
>> just before Commit Exclusions, and deleting the Special Notations
>> section altogether. So add something like this:
>>
>> Commit Parents
>> ~~~~~~~~~~~~~~
>
> It's a bit better, but I'm still not sure it really tells the story,
> maybe "Handling Commit Parent(s)", with that subtle extra emphasis!
"Specifying Commit Parents"?  Any of these work for me, really.
Show 24 quoted lines
>>
>> '<rev>{caret}@' Notation::
>> The 'r1{caret}@' notation means all parents of 'r1',
>> excluding 'r1' itself.
>>
>> This smoothly re-introduces the notion of parents for readers who
>> skipped to this section, and helps them make sense of the <rev>^!
>> notation.
>>
>> Plus there's no longer anything "special" about any of the syntax.
>>
>>> +
>>> +Revision Range Summary
>>> +----------------------
>>
>> Sorry, but the man page renders this in all caps.  I really think you
>> should use ~~~~~~~~~ here.
>
> Yes, the man page formating is annoying relative to the web page
> formatting which it has to be compared against.
>
> I felt that it was at a higher level than the other sub-headings, and
> that using mixed case did work well on the html (the Git for Windows
> standard).

IMHO it has to look like it's part of the SPECIFYING RANGES section. It need not be higher than the other subsections though.

> At the moment I'm minded to keep it as is unless others chime in.
I'll bow to the will of the majority.
>>
>> M.
>>
> I'll be away till mid next week.
As will I!
		M.
Previous: Philip OakleyNext: Junio C Hamano
Message 53 of 107 in “name for A..B ranges?”
  1. Philip OakleyJun 22, 2016
  2. Jeff KingJun 24, 2016
  3. Junio C HamanoJun 24, 2016
  4. Philip OakleyJun 25, 2016
  5. 0/2 Re: name for A..B ranges?Philip Oakley, Jun 25, 2016
  6. 2/2 doc: give headings for the two and three dot notationsPhilip Oakley, Jun 25, 2016
  7. 1/2 doc: use 'symmetric difference' consistentlyPhilip Oakley, Jun 25, 2016
  8. doc: show the actual left, right, and boundary marksPhilip Oakley, Jun 25, 2016
  9. 0/4 Name for A..B ranges?Philip Oakley, Jun 30, 2016
  10. 1/4 doc: use 'symmetric difference' consistentlyPhilip Oakley, Jun 30, 2016
  11. 3/4 doc: give headings for the two and three dot notationsPhilip Oakley, Jun 30, 2016
  12. 4/4 doc: clarify that `^r1` will exclude `r1` itselfPhilip Oakley, Jun 30, 2016
  13. Junio C HamanoJul 1, 2016
  14. Philip OakleyJul 1, 2016
  15. Junio C HamanoJul 1, 2016
  16. Junio C HamanoJul 1, 2016
  17. Philip OakleyJul 10, 2016
  18. 2/4 doc: show the actual left, right, and boundary marksPhilip Oakley, Jun 30, 2016
  19. Junio C HamanoJul 1, 2016
  20. 0/8 Name for A..B ranges?Philip Oakley, Jul 11, 2016
  21. 1/8 doc: use 'symmetric difference' consistentlyPhilip Oakley, Jul 11, 2016
  22. 3/8 doc: show the actual left, right, and boundary marksPhilip Oakley, Jul 11, 2016
  23. 4/8 doc: give headings for the two and three dot notationsPhilip Oakley, Jul 11, 2016
  24. Marc BranchaudJul 12, 2016
  25. Junio C HamanoJul 12, 2016
  26. Philip OakleyJul 12, 2016
  27. Jakub NarębskiJul 19, 2016
  28. Philip OakleyJul 19, 2016
  29. Philip OakleyJul 12, 2016
  30. Jeff KingJul 12, 2016
  31. 5/8 doc: gitrevisions - use 'reachable' in page descriptionPhilip Oakley, Jul 11, 2016
  32. 6/8 doc: gitrevisions - clarify 'latter case' is revision walkPhilip Oakley, Jul 11, 2016
  33. 7/8 doc: revisions - define `reachable`Philip Oakley, Jul 11, 2016
  34. Marc BranchaudJul 12, 2016
  35. Philip OakleyJul 12, 2016
  36. 8/8 doc: revisions - clarify reachability examplesPhilip Oakley, Jul 11, 2016
  37. 2/8 doc: revisions - name the Left and Right sidesPhilip Oakley, Jul 11, 2016
  38. Junio C HamanoJul 12, 2016
  39. Philip OakleyJul 12, 2016
  40. Junio C HamanoJul 12, 2016
  41. Philip OakleyJul 12, 2016
  42. 0/8 Name for A..B ranges?Philip Oakley, Jul 20, 2016
  43. 2/8 doc: revisions - name the left and right sidesPhilip Oakley, Jul 20, 2016
  44. 7/8 doc: revisions - define `reachable`Philip Oakley, Jul 20, 2016
  45. 8/8 doc: revisions - clarify reachability examplesPhilip Oakley, Jul 20, 2016
  46. 6/8 doc: gitrevisions - clarify 'latter case' is revision walkPhilip Oakley, Jul 20, 2016
  47. 3/8 doc: show the actual left, right, and boundary marksPhilip Oakley, Jul 20, 2016
  48. 1/8 doc: use 'symmetric difference' consistentlyPhilip Oakley, Jul 20, 2016
  49. 5/8 doc: gitrevisions - use 'reachable' in page descriptionPhilip Oakley, Jul 20, 2016
  50. 4/8 doc: give headings for the two and three dot notationsPhilip Oakley, Jul 20, 2016
  51. Marc BranchaudJul 21, 2016
  52. Philip OakleyJul 21, 2016
  53. Marc BranchaudJul 21, 2016
  54. Junio C HamanoJul 22, 2016
  55. Junio C HamanoJul 20, 2016
  56. 00/12 Update git revisionsPhilip Oakley, Aug 11, 2016
  57. 01/12 doc: use 'symmetric difference' consistentlyPhilip Oakley, Aug 11, 2016
  58. Jakub NarębskiAug 26, 2016
  59. Junio C HamanoAug 26, 2016
  60. Philip OakleyAug 11, 2016
  61. 00/12 Update git revisionsPhilip Oakley, Aug 12, 2016
  62. 06/12 doc: revisions: single vs multi-parent notation comparisonPhilip Oakley, Aug 12, 2016
  63. Jakub NarębskiAug 26, 2016
  64. Junio C HamanoAug 26, 2016
  65. 12/12 doc: revisions: sort examples and fix alignment of the unchangedPhilip Oakley, Aug 12, 2016
  66. 11/12 doc: revisions: show revision expansion in examplesPhilip Oakley, Aug 12, 2016
  67. 05/12 doc: revisions: extra clarification of <rev>^! notation effectsPhilip Oakley, Aug 12, 2016
  68. Marc BranchaudAug 15, 2016
  69. Philip OakleyAug 15, 2016
  70. BUG: indent-with-non-tab always on (was: Re: [PATCH v6 00/12] Update git revisions)Marc Branchaud, Aug 15, 2016
  71. Marc BranchaudAug 15, 2016
  72. Junio C HamanoAug 15, 2016
  73. Junio C HamanoAug 31, 2016
  74. 00/12 Update git revisionsPhilip Oakley, Aug 11, 2016
  75. 01/12 doc: use 'symmetric difference' consistentlyPhilip Oakley, Aug 11, 2016
  76. 00/12 Update git revisionsPhilip Oakley, Aug 12, 2016
  77. 12/12 doc: revisions: sort examples and fix alignment of the unchangedPhilip Oakley, Aug 12, 2016
  78. 09/12 doc: revisions - define `reachable`Philip Oakley, Aug 12, 2016
  79. Jakub NarębskiAug 28, 2016
  80. Philip OakleyAug 29, 2016
  81. Jakub NarębskiAug 29, 2016
  82. Philip OakleyAug 29, 2016
  83. 08/12 doc: gitrevisions - clarify 'latter case' is revision walkPhilip Oakley, Aug 12, 2016
  84. 11/12 doc: revisions: show revision expansion in examplesPhilip Oakley, Aug 12, 2016
  85. Marc BranchaudAug 12, 2016
  86. Philip OakleyAug 12, 2016
  87. 06/12 doc: revisions: single vs multi-parent notation comparisonPhilip Oakley, Aug 12, 2016
  88. Marc BranchaudAug 12, 2016
  89. Philip OakleyAug 12, 2016
  90. 10/12 doc: revisions - clarify reachability examplesPhilip Oakley, Aug 12, 2016
  91. 05/12 doc: revisions: extra clarification of <rev>^! notation effectsPhilip Oakley, Aug 12, 2016
  92. Marc BranchaudAug 12, 2016
  93. Philip OakleyAug 12, 2016
  94. 03/12 doc: show the actual left, right, and boundary marksPhilip Oakley, Aug 12, 2016
  95. 01/12 doc: use 'symmetric difference' consistentlyPhilip Oakley, Aug 12, 2016
  96. 07/12 doc: gitrevisions - use 'reachable' in page descriptionPhilip Oakley, Aug 12, 2016
  97. 04/12 doc: revisions: give headings for the two and three dot notationsPhilip Oakley, Aug 12, 2016
  98. Jeff KingAug 12, 2016
  99. Marc BranchaudAug 12, 2016
  100. 02/12 doc: revisions - name the left and right sidesPhilip Oakley, Aug 12, 2016
  101. Marc BranchaudAug 12, 2016
  102. Philip OakleyAug 12, 2016
  103. Junio C HamanoAug 12, 2016
  104. Junio C HamanoJun 25, 2016
  105. Philip OakleyJun 27, 2016
  106. Junio C HamanoJun 27, 2016
  107. Philip OakleyJun 27, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.