* [PATCH v2 1/2] worktree: clarify --expire applies to missing worktrees
2025-12-19 18:16 ` [PATCH v2 0/2] " Sam Bostock via GitGitGadget
@ 2025-12-19 18:16 ` Sam Bostock via GitGitGadget
2025-12-20 6:07 ` Junio C Hamano
2025-12-19 18:16 ` [PATCH v2 2/2] worktree: use 'prune' instead of 'expire' in help text Sam Bostock via GitGitGadget
` (2 subsequent siblings)
3 siblings, 1 reply; 14+ messages in thread
From: Sam Bostock via GitGitGadget @ 2025-12-19 18:16 UTC (permalink / raw)
To: git; +Cc: Eric Sunshine, Sam Bostock, Sam Bostock
From: Sam Bostock <sam.bostock@shopify.com>
The `--expire` option for `git worktree list` and `git worktree prune`
only affects worktrees whose working directory path no longer exists.
The help text did not make this clear, and the documentation
inconsistently used "unused" for prune but "missing" for list.
This updates the help text and documentation to consistently describe
these as "missing worktrees".
Signed-off-by: Sam Bostock <sam@sambostock.ca>
---
Documentation/git-worktree.adoc | 2 +-
builtin/worktree.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc
index f272f79783..402d363064 100644
--- a/Documentation/git-worktree.adoc
+++ b/Documentation/git-worktree.adoc
@@ -271,7 +271,7 @@ mismatch, even if the links are correct.
With `list`, output additional information about worktrees (see below).
`--expire <time>`::
- With `prune`, only expire unused worktrees older than _<time>_.
+ With `prune`, only expire missing worktrees older than _<time>_.
+
With `list`, annotate missing worktrees as prunable if they are older than
_<time>_.
diff --git a/builtin/worktree.c b/builtin/worktree.c
index fbdaf2eb2e..82fcbfeccf 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
OPT__VERBOSE(&verbose, N_("report pruned working trees")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("expire working trees older than <time>")),
+ N_("expire missing working trees older than <time>")),
OPT_END()
};
@@ -1070,7 +1070,7 @@ static int list(int ac, const char **av, const char *prefix,
OPT_BOOL(0, "porcelain", &porcelain, N_("machine-readable output")),
OPT__VERBOSE(&verbose, N_("show extended annotations and reasons, if available")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("add 'prunable' annotation to worktrees older than <time>")),
+ N_("add 'prunable' annotation to missing worktrees older than <time>")),
OPT_SET_INT('z', NULL, &line_terminator,
N_("terminate records with a NUL character"), '\0'),
OPT_END()
--
gitgitgadget
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 1/2] worktree: clarify --expire applies to missing worktrees
2025-12-19 18:16 ` [PATCH v2 1/2] " Sam Bostock via GitGitGadget
@ 2025-12-20 6:07 ` Junio C Hamano
0 siblings, 0 replies; 14+ messages in thread
From: Junio C Hamano @ 2025-12-20 6:07 UTC (permalink / raw)
To: Sam Bostock via GitGitGadget; +Cc: git, Eric Sunshine, Sam Bostock
"Sam Bostock via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Sam Bostock <sam.bostock@shopify.com>
>
> The `--expire` option for `git worktree list` and `git worktree prune`
> only affects worktrees whose working directory path no longer exists.
> The help text did not make this clear, and the documentation
> inconsistently used "unused" for prune but "missing" for list.
Well analyzed and described.
> This updates the help text and documentation to consistently describe
> these as "missing worktrees".
We phrase it more like "Update the help text and documentation to
...", as if you are asking somebody sitting on the keyboard to make
that change.
> diff --git a/builtin/worktree.c b/builtin/worktree.c
> index fbdaf2eb2e..82fcbfeccf 100644
> --- a/builtin/worktree.c
> +++ b/builtin/worktree.c
> @@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
> OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
> OPT__VERBOSE(&verbose, N_("report pruned working trees")),
> OPT_EXPIRY_DATE(0, "expire", &expire,
> - N_("expire working trees older than <time>")),
> + N_("expire missing working trees older than <time>")),
"expire" -> "prune" or "remove". As the user already said "prune"
when they run "git worktree prune -h", using a different and more
common verb "remove" to explain the action might be more helpful
than saying "prune".
Thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 2/2] worktree: use 'prune' instead of 'expire' in help text
2025-12-19 18:16 ` [PATCH v2 0/2] " Sam Bostock via GitGitGadget
2025-12-19 18:16 ` [PATCH v2 1/2] " Sam Bostock via GitGitGadget
@ 2025-12-19 18:16 ` Sam Bostock via GitGitGadget
2025-12-20 6:11 ` Junio C Hamano
2026-01-21 19:55 ` [PATCH v2 0/2] worktree: clarify --expire applies to missing worktrees Junio C Hamano
2026-01-28 5:39 ` [PATCH v3] worktree: clarify that --expire only affects " Sam Bostock via GitGitGadget
3 siblings, 1 reply; 14+ messages in thread
From: Sam Bostock via GitGitGadget @ 2025-12-19 18:16 UTC (permalink / raw)
To: git; +Cc: Eric Sunshine, Sam Bostock, Sam Bostock
From: Sam Bostock <sam.bostock@shopify.com>
Use 'prune' instead of 'expire' when describing the --expire option's
effect on missing worktrees, since the terminology is clearer.
Signed-off-by: Sam Bostock <sam@sambostock.ca>
---
Documentation/git-worktree.adoc | 2 +-
builtin/worktree.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc
index 402d363064..29b43925f3 100644
--- a/Documentation/git-worktree.adoc
+++ b/Documentation/git-worktree.adoc
@@ -271,7 +271,7 @@ mismatch, even if the links are correct.
With `list`, output additional information about worktrees (see below).
`--expire <time>`::
- With `prune`, only expire missing worktrees older than _<time>_.
+ With `prune`, only prune missing worktrees if older than _<time>_.
+
With `list`, annotate missing worktrees as prunable if they are older than
_<time>_.
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 82fcbfeccf..3d6547c23b 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
OPT__VERBOSE(&verbose, N_("report pruned working trees")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("expire missing working trees older than <time>")),
+ N_("prune missing working trees older than <time>")),
OPT_END()
};
--
gitgitgadget
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 2/2] worktree: use 'prune' instead of 'expire' in help text
2025-12-19 18:16 ` [PATCH v2 2/2] worktree: use 'prune' instead of 'expire' in help text Sam Bostock via GitGitGadget
@ 2025-12-20 6:11 ` Junio C Hamano
0 siblings, 0 replies; 14+ messages in thread
From: Junio C Hamano @ 2025-12-20 6:11 UTC (permalink / raw)
To: Sam Bostock via GitGitGadget; +Cc: git, Eric Sunshine, Sam Bostock
"Sam Bostock via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Sam Bostock <sam.bostock@shopify.com>
>
> Use 'prune' instead of 'expire' when describing the --expire option's
> effect on missing worktrees, since the terminology is clearer.
>
> Signed-off-by: Sam Bostock <sam@sambostock.ca>
> ---
> Documentation/git-worktree.adoc | 2 +-
> builtin/worktree.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
Does this v2 use exactly the same commit from v1 as [1/2] and add
this [2/2] as if you are saying "oops, the previous one missed
something we should have updated but forgot/failed to do so; here is
an improvement?"
Don't. Unless the change you deliberately made as a follow-up
improvement is logically separate and significant, that is.
Thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 0/2] worktree: clarify --expire applies to missing worktrees
2025-12-19 18:16 ` [PATCH v2 0/2] " Sam Bostock via GitGitGadget
2025-12-19 18:16 ` [PATCH v2 1/2] " Sam Bostock via GitGitGadget
2025-12-19 18:16 ` [PATCH v2 2/2] worktree: use 'prune' instead of 'expire' in help text Sam Bostock via GitGitGadget
@ 2026-01-21 19:55 ` Junio C Hamano
2026-01-28 5:39 ` [PATCH v3] worktree: clarify that --expire only affects " Sam Bostock via GitGitGadget
3 siblings, 0 replies; 14+ messages in thread
From: Junio C Hamano @ 2026-01-21 19:55 UTC (permalink / raw)
To: Sam Bostock via GitGitGadget; +Cc: git, Eric Sunshine, Sam Bostock
"Sam Bostock via GitGitGadget" <gitgitgadget@gmail.com> writes:
> Changes from v1:
>
> * Use 'prune' instead of 'expire' when describing the --expire option's
> effect on missing worktrees, since the terminology is clearer.
>
> Sam Bostock (2):
> worktree: clarify --expire applies to missing worktrees
> worktree: use 'prune' instead of 'expire' in help text
>
> Documentation/git-worktree.adoc | 2 +-
> builtin/worktree.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
>
> base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2135%2Fsambostock%2Fexpire-missing-worktrees-v2
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2135/sambostock/expire-missing-worktrees-v2
> Pull-Request: https://github.com/git/git/pull/2135
>
> Range-diff vs v1:
>
> 1: ddd4191ecb = 1: ddd4191ecb worktree: clarify --expire applies to missing worktrees
> -: ---------- > 2: ff4732b72a worktree: use 'prune' instead of 'expire' in help text
I think we have been expecting a reroll of this topic. Any further
progress?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3] worktree: clarify that --expire only affects missing worktrees
2025-12-19 18:16 ` [PATCH v2 0/2] " Sam Bostock via GitGitGadget
` (2 preceding siblings ...)
2026-01-21 19:55 ` [PATCH v2 0/2] worktree: clarify --expire applies to missing worktrees Junio C Hamano
@ 2026-01-28 5:39 ` Sam Bostock via GitGitGadget
2026-01-30 0:29 ` Eric Sunshine
3 siblings, 1 reply; 14+ messages in thread
From: Sam Bostock via GitGitGadget @ 2026-01-28 5:39 UTC (permalink / raw)
To: git; +Cc: Eric Sunshine, Sam Bostock, Sam Bostock
From: Sam Bostock <sam.bostock@shopify.com>
The --expire option for "git worktree list" and "git worktree prune"
only affects worktrees whose working directory path no longer exists.
The help text did not make this clear, and the documentation
inconsistently used "unused" for prune but "missing" for list.
Update the help text and documentation to consistently describe these
as "missing worktrees", and use "prune" instead of "expire" when
describing the effect on missing worktrees since the terminology is
clearer.
While at it, expand the description of the "prune" subcommand itself
to better explain what it does and when to use it, as suggested by
Junio.
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Sam Bostock <sam@sambostock.ca>
---
worktree: clarify --expire applies to missing worktrees
Changes from v2:
* Squash into a single commit
* Expand the prune subcommand description per Junio's suggestion
Changes from v1:
* Use "prune" instead of "expire" in help text
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2135%2Fsambostock%2Fexpire-missing-worktrees-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2135/sambostock/expire-missing-worktrees-v3
Pull-Request: https://github.com/git/git/pull/2135
Range-diff vs v2:
1: ddd4191ecb ! 1: a4483d9a20 worktree: clarify --expire applies to missing worktrees
@@ Metadata
Author: Sam Bostock <sam.bostock@shopify.com>
## Commit message ##
- worktree: clarify --expire applies to missing worktrees
+ worktree: clarify that --expire only affects missing worktrees
- The `--expire` option for `git worktree list` and `git worktree prune`
+ The --expire option for "git worktree list" and "git worktree prune"
only affects worktrees whose working directory path no longer exists.
The help text did not make this clear, and the documentation
inconsistently used "unused" for prune but "missing" for list.
- This updates the help text and documentation to consistently describe
- these as "missing worktrees".
+ Update the help text and documentation to consistently describe these
+ as "missing worktrees", and use "prune" instead of "expire" when
+ describing the effect on missing worktrees since the terminology is
+ clearer.
+ While at it, expand the description of the "prune" subcommand itself
+ to better explain what it does and when to use it, as suggested by
+ Junio.
+
+ Helped-by: Eric Sunshine <sunshine@sunshineco.com>
+ Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Sam Bostock <sam@sambostock.ca>
## Documentation/git-worktree.adoc ##
+@@ Documentation/git-worktree.adoc: with linked worktrees if you move the main worktree manually.)
+
+ `prune`::
+
+-Prune worktree information in `$GIT_DIR/worktrees`.
++Remove worktree information in `$GIT_DIR/worktrees` for worktrees
++whose working trees are missing. Useful after manually removing
++a working tree that is no longer needed (but use "git worktree
++remove" next time you want to do so). Also, if you _moved_ a
++working tree elsewhere causing the worktree information to become
++dangling, see "git worktree repair" to reconnect the worktree to
++the new working tree location.
+
+ `remove`::
+
@@ Documentation/git-worktree.adoc: mismatch, even if the links are correct.
With `list`, output additional information about worktrees (see below).
`--expire <time>`::
- With `prune`, only expire unused worktrees older than _<time>_.
-+ With `prune`, only expire missing worktrees older than _<time>_.
++ With `prune`, only prune missing worktrees if older than _<time>_.
+
With `list`, annotate missing worktrees as prunable if they are older than
_<time>_.
@@ builtin/worktree.c: static int prune(int ac, const char **av, const char *prefix
OPT__VERBOSE(&verbose, N_("report pruned working trees")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("expire working trees older than <time>")),
-+ N_("expire missing working trees older than <time>")),
++ N_("prune missing working trees older than <time>")),
OPT_END()
};
2: ff4732b72a < -: ---------- worktree: use 'prune' instead of 'expire' in help text
Documentation/git-worktree.adoc | 10 ++++++++--
builtin/worktree.c | 4 ++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc
index f272f79783..22ef37ec02 100644
--- a/Documentation/git-worktree.adoc
+++ b/Documentation/git-worktree.adoc
@@ -131,7 +131,13 @@ with linked worktrees if you move the main worktree manually.)
`prune`::
-Prune worktree information in `$GIT_DIR/worktrees`.
+Remove worktree information in `$GIT_DIR/worktrees` for worktrees
+whose working trees are missing. Useful after manually removing
+a working tree that is no longer needed (but use "git worktree
+remove" next time you want to do so). Also, if you _moved_ a
+working tree elsewhere causing the worktree information to become
+dangling, see "git worktree repair" to reconnect the worktree to
+the new working tree location.
`remove`::
@@ -271,7 +277,7 @@ mismatch, even if the links are correct.
With `list`, output additional information about worktrees (see below).
`--expire <time>`::
- With `prune`, only expire unused worktrees older than _<time>_.
+ With `prune`, only prune missing worktrees if older than _<time>_.
+
With `list`, annotate missing worktrees as prunable if they are older than
_<time>_.
diff --git a/builtin/worktree.c b/builtin/worktree.c
index fbdaf2eb2e..3d6547c23b 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -252,7 +252,7 @@ static int prune(int ac, const char **av, const char *prefix,
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
OPT__VERBOSE(&verbose, N_("report pruned working trees")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("expire working trees older than <time>")),
+ N_("prune missing working trees older than <time>")),
OPT_END()
};
@@ -1070,7 +1070,7 @@ static int list(int ac, const char **av, const char *prefix,
OPT_BOOL(0, "porcelain", &porcelain, N_("machine-readable output")),
OPT__VERBOSE(&verbose, N_("show extended annotations and reasons, if available")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("add 'prunable' annotation to worktrees older than <time>")),
+ N_("add 'prunable' annotation to missing worktrees older than <time>")),
OPT_SET_INT('z', NULL, &line_terminator,
N_("terminate records with a NUL character"), '\0'),
OPT_END()
base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda
--
gitgitgadget
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v3] worktree: clarify that --expire only affects missing worktrees
2026-01-28 5:39 ` [PATCH v3] worktree: clarify that --expire only affects " Sam Bostock via GitGitGadget
@ 2026-01-30 0:29 ` Eric Sunshine
0 siblings, 0 replies; 14+ messages in thread
From: Eric Sunshine @ 2026-01-30 0:29 UTC (permalink / raw)
To: Sam Bostock via GitGitGadget; +Cc: git, Sam Bostock
On Wed, Jan 28, 2026 at 12:39 AM Sam Bostock via GitGitGadget
<gitgitgadget@gmail.com> wrote:
> The --expire option for "git worktree list" and "git worktree prune"
> only affects worktrees whose working directory path no longer exists.
> The help text did not make this clear, and the documentation
> inconsistently used "unused" for prune but "missing" for list.
>
> Update the help text and documentation to consistently describe these
> as "missing worktrees", and use "prune" instead of "expire" when
> describing the effect on missing worktrees since the terminology is
> clearer.
>
> While at it, expand the description of the "prune" subcommand itself
> to better explain what it does and when to use it, as suggested by
> Junio.
>
> Signed-off-by: Sam Bostock <sam@sambostock.ca>
> ---
> Changes from v2:
> * Squash into a single commit
> * Expand the prune subcommand description per Junio's suggestion
Thanks for re-rolling this patch. I think this version addresses all
the review comments from Junio and myself and is ready to be merged to
"next".
^ permalink raw reply [flat|nested] 14+ messages in thread