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

Re: Feature request: support listing worktrees sorted by creation time

From
NKNorbert Kiesel <nkiesel@gmail.com>
Date
Mar 5, 2026, 23:36 UTC
Message-ID
<CAM+g_NsX5jdjbhtLznxJ=ZRtJ4ShEAzTHzkjgnidyDr-a2r=kw@mail.gmail.com>
In-Reply-To
<xmqqqzpy46n5.fsf@gitster.g>

Wrote a Zsh script that uses the "directory create time" but when a worktree is moved then that will be updated. So would still like to have `git worktree add` store the current timestamp somewhere.

```zsh #!/bin/zsh # List git worktrees with creation timestamps, sorted oldest to newest

wt_path="" branch="" typeset -a ts_arr wt_arr br_arr

flush() {
    [[ -z $wt_path ]] && return
    local epoch=$(stat -f '%B' "$wt_path" 2>/dev/null)
    ts_arr+=("${epoch:-0}")
    wt_arr+=("$wt_path")
    br_arr+=("${branch:-(detached)}")
    wt_path="" branch=""
}
while IFS= read -r line; do
    case $line in
        worktree\ *)  flush; wt_path=${line#worktree } ;;
        branch\ *)    branch=${line#branch refs/heads/} ;;
        detached)     branch="(detached)" ;;
        "")           flush ;;
    esac
done < <(git worktree list --porcelain)
flush
# Find max branch width for column alignment
integer max_br=0
for br in "${br_arr[@]}"; do
    (( ${#br} > max_br )) && max_br=${#br}
done

# Print first entry (main worktree) always first printf "%s %-${max_br}s %s\n" "$(date -r "${ts_arr[1]}" +"%Y-%m-%d")" "${br_arr[1]}" "${wt_arr[1]}"

# Collect remaining entries prefixed with epoch for numeric sort
typeset -a rest_lines
for (( i=2; i<=${#ts_arr}; i++ )); do
    rest_lines+=("${ts_arr[$i]}  $(printf "%-${max_br}s  %s"
"${br_arr[$i]}" "${wt_arr[$i]}")")
done
# Sort numerically by epoch, then replace epoch with formatted date
(( ${#rest_lines} > 0 )) && print -l "${(on)rest_lines[@]}" | while
IFS= read -r line; do
    epoch=${line%% *}
    printf "%s  %s\n" "$(date -r "$epoch" +"%Y-%m-%d")" "${line#*  }"
done
```
On Thu, Mar 5, 2026 at 7:50 AM Junio C Hamano <gitster@pobox.com> wrote:
Show 22 quoted lines
>
> Norbert Kiesel <nkiesel@gmail.com> writes:
>
> > I have multiple repos with more than 20 worktrees, and sometimes
> > forget the name of a recently added worktree. Therefore it would
> > really be nice if I could use something like ‘git worktree list
> > —created’ to list them by their creation timestamp. Is that something
> > that makes sense to you as well? I could also create a pull request
> > for this if you would like it.
>
> I do not think we have any _record_ of when each of these worktrees
> was created, so this is not a realistic request.
>
> The output from "git worktree list" may be more than 20 lines, but
> isn't your terminal taller than 20 lines ;-)?
>
> Since very early days of Git, we have created .git/description file
> that is not used very much (I think it is shown in gitweb).  Perhaps
> worktree should have an equivalent in per-worktree part of their
> .git/ directory and "git worktree list --verbose" can use its
> contents in addition to the additional pieces information it already
> shows, or something like that, perhaps?
Previous: Junio C HamanoNext: Erik Cervin Edin
Message 5 of 6 in “Feature request: support listing worktrees sorted by creation time”
  1. Norbert KieselMar 5, 2026
  2. Johannes SixtMar 5, 2026
  3. Norbert KieselMar 5, 2026
  4. Junio C HamanoMar 5, 2026
  5. Norbert KieselMar 5, 2026
  6. Erik Cervin EdinMar 6, 2026

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.