When a committish, C, is immediately followed by 3dots (...) which are, in turn, not followed by another committish, we are usually asking for the revision range C...HEAD, which is known as the symmetric difference of C and HEAD. When describe_detached_head is invoked, it prints the committish followed by 3dots as elaborated above when it indicates the current and previous HEAD positions. For example: # Randomly check out one of the first seven git.git commits # (Starting with a detached HEAD already) $ git checkout $(git rev-list master | tail -7 | shuf | head -1) Previous HEAD position was bfcf2d7874f7... checkout: describe_detached_head: remove 3dots after committish HEAD is now at 19b2860cba57... Use "-Wall -O2" for the compiler to get more warnings. "Evaluating" this displayed pseudo-range for the current HEAD indication resolves to the empty range (C...HEAD, where C equals HEAD). For the previous HEAD indication, the results of the "evaluation" are somewhat more difficult to predict: previous here refers to what the reflog dictates (this is not necessarily the topological ancestor in the DAG, i.e., HEAD^). In the example above, the "range" resolves to almost all commits in the author's clone of git.git. Running the command again causes the then previous to current HEAD position "range" to be a lot smaller. This could be confusing not only for novices; in either case, no range should be insinuated by describe_detached_head. Granted, this "evaluation" is at the moment, if at all, only performed in the mind of the observer. And, to be sure, the 3dots *are* intended as a continuation indication for the abbreviated SHA-1 value. Nevertheless, we should get rid of them, for the following reasons: * they would still be displayed if someone had their core.abbrev config value set to the max * when the built-in version of checkout was introduced by commit 782c2d65c240 ("Build in checkout", 2008-02-07) no 3dots were present in the legacy git-checkout.sh (see contrib/examples/git-checkout.sh) * when git-reset causes a new HEAD line to be printed (during a hard reset), neither builtin/reset.c nor contrib/examples/git-reset.sh mention 3dots Lest we confuse the meticulous observer, we ought to retire the 3dots in the circumstances described above. Signed-off-by: Ann T Ropea <bedhanger@xxxxxx> --- builtin/checkout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index fc4f8fd2ea29..59cc52e55855 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -404,7 +404,7 @@ static void describe_detached_head(const char *msg, struct commit *commit) struct strbuf sb = STRBUF_INIT; if (!parse_commit(commit)) pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb); - fprintf(stderr, "%s %s... %s\n", msg, + fprintf(stderr, "%s %s %s\n", msg, find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV), sb.buf); strbuf_release(&sb); } -- 2.13.6