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

[PATCH] revisions(7): clarify that most commands take a single revision range

From
Junio C Hamano <gitster@pobox.com>
Date
May 18, 2021, 11:17 UTC
Message-ID
<xmqqv97g2svd.fsf@gitster.g>

Sometimes new people are confused by how a revision "range" works, in that it is not a random collection of commits but a set of commits that are all connected to each other, and most Git commands work on a single such "range".

Give an example to clarify it.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * So, here it is in a proper patch form, with an extended
   description and illustration.
 Documentation/revisions.txt | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
index d9169c062e..f5f17b65a1 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.txt
@@ -260,6 +260,9 @@ any of the given commits.
 A commit's reachable set is the commit itself and the commits in
 its ancestry chain.
 
+There are several notations to specify a set of connected commits
+(called a "revision range"), illustrated below.
+
 
 Commit Exclusions
 ~~~~~~~~~~~~~~~~~
@@ -294,6 +297,26 @@ 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.
 
+Commands that are specifically designed to take two distinct ranges
+(e.g. "git range-diff R1 R2" to compare two ranges) do exist, but
+they are exceptions.  Unless otherwise noted, all "git" commands
+that operate on a set of commits work on a single revision range.
+In other words, writing two "two-dot range notation" next to each
+other, e.g.
+
+    $ git log A..B C..D
+
+does *not* specify two revision ranges for most commands.  Instead
+it will name a single connected set of commits, i.e. those that are
+reachable from either B or D but are reachable from neither A or C.
+In a linear history like this:
+
+    ---A---B---o---o---C---D
+
+because A and B are reachable from C, the revision range specified
+by these two dotted ranges is a single commit D.
+
+
 Other <rev>{caret} Parent Shorthand Notations
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Three other shorthands exist, particularly useful for merge commits,
-- 
2.32.0-rc0-111-g32b9632252
Next: Bagas Sanjaya
Message 1 of 9 in “revisions(7): clarify that most commands take a single revision range”
  1. revisions(7): clarify that most commands take a single revision rangeJunio C Hamano, May 18, 2021
  2. Bagas SanjayaMay 20, 2021
  3. Junio C HamanoMay 20, 2021
  4. Junio C HamanoMay 20, 2021
  5. Bagas SanjayaMay 20, 2021
  6. Elijah NewrenMay 20, 2021
  7. Eric SunshineMay 20, 2021
  8. Elijah NewrenMay 20, 2021
  9. Felipe ContrerasMay 21, 2021

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.