Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > struct atom_value *va, *vb; > int cmp; > + int cmp_detached_head = 0; > cmp_type cmp_type = used_atom[s->atom].type; > int (*cmp_fn)(const char *, const char *); > struct strbuf err = STRBUF_INIT; > @@ -2370,6 +2371,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru > ^ > (b->kind & FILTER_REFS_DETACHED_HEAD))) { > cmp = compare_detached_head(a, b); > + cmp_detached_head = 1; > } else if (s->version) > cmp = versioncmp(va->s, vb->s); > else if (cmp_type == FIELD_STR) > @@ -2383,7 +2385,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru > cmp = 1; > } > > - return (s->reverse) ? -cmp : cmp; > + return (s->reverse && !cmp_detached_head) ? -cmp : cmp; > } OK. Other criteria would honor the "reverse" bit, but when we work on the set that includes "HEAD" ref (which only happens when "branch -l" deals with a detached head), it always tries to sort it before all other refs, regardless of the reverse bit. Makes sense. > static int compare_refs(const void *a_, const void *b_, void *ref_sorting) > diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh > index 8f53b081365..5e0577d5c7f 100755 > --- a/t/t3203-branch-output.sh > +++ b/t/t3203-branch-output.sh > @@ -221,10 +221,10 @@ test_expect_success 'git branch `--sort=[-]objectsize` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > branch-one > main > branch-two > - * (HEAD detached from fromtag) > EOF > git branch --sort=-objectsize >actual && > test_i18ncmp expect actual > @@ -241,10 +241,10 @@ test_expect_success 'git branch `--sort=[-]type` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > branch-one > branch-two > main > - * (HEAD detached from fromtag) > EOF > git branch --sort=-type >actual && > test_i18ncmp expect actual > @@ -261,10 +261,10 @@ test_expect_success 'git branch `--sort=[-]version:refname` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > main > branch-two > branch-one > - * (HEAD detached from fromtag) > EOF > git branch --sort=-version:refname >actual && > test_i18ncmp expect actual