On Wed, Dec 1, 2021 at 5:16 PM Anders Kaseorg <andersk@xxxxxxx> wrote: > Refuse to fetch into the currently checked out branch of any working > tree, not just the current one. > [...] > Signed-off-by: Anders Kaseorg <andersk@xxxxxxx> > --- > diff --git a/builtin/fetch.c b/builtin/fetch.c > @@ -868,16 +868,17 @@ static int update_local_ref(struct ref *ref, > + if (!update_head_ok && > + (wt = find_shared_symref(worktrees, "HEAD", ref->name)) && > + !wt->is_bare && !is_null_oid(&ref->old_oid)) { > /* > * If this is the head, and it's not okay to update > * the head, and the old value of the head isn't empty... > */ > format_display(display, '!', _("[rejected]"), > - _("can't fetch in current branch"), > + wt->is_current ? > + _("can't fetch in current branch") : > + _("checked out in another worktree"), > remote, pretty_ref, summary_width); Minor observation: The "checked out in another worktree" message would be much more helpful if it mentioned the worktree itself... > @@ -1385,19 +1388,18 @@ static int prune_refs(struct refspec *rs, struct ref *ref_map, > - if (ref_map->peer_ref && !strcmp(current_branch->refname, > - ref_map->peer_ref->name)) > - die(_("refusing to fetch into current branch %s " > - "of non-bare repository"), > - current_branch->refname); > + if (ref_map->peer_ref && > + (wt = find_shared_symref(worktrees, "HEAD", > + ref_map->peer_ref->name)) && > + !wt->is_bare) > + die(_("refusing to fetch into branch '%s' " > + "checked out at '%s'"), > + ref_map->peer_ref->name, wt->path); ... much like this message has been updated to mention the worktree. However, I didn't look to see how much work it would be to improve the earlier message; such an improvement could always be done atop this series later on by someone.