Function: magit-worktree-delete

magit-worktree-delete is an interactive and byte-compiled function defined in magit-worktree.el.

Signature

(magit-worktree-delete WORKTREE)

Documentation

Delete a worktree, defaulting to the worktree at point.

The primary worktree cannot be deleted.

Key Bindings

Source Code

;; Defined in ~/.emacs.d/elpa/magit-20260822.1158/magit-worktree.el
(defun magit-worktree-delete (worktree)
  "Delete a worktree, defaulting to the worktree at point.
The primary worktree cannot be deleted."
  (interactive
    (list (magit-completing-read "Delete worktree"
                                 (mapcar #'car (cdr (magit-list-worktrees)))
                                 nil t nil nil
                                 (magit-section-value-if 'worktree))))
  (if (file-directory-p (expand-file-name ".git" worktree))
      (user-error "Deleting %s would delete the shared .git directory" worktree)
    (let* ((wtrees (magit-list-worktrees))
           (wtree (assoc worktree wtrees))
           (locked (nth 5 wtree))
           (primary (file-name-as-directory (caar wtrees))))
      (when locked
        (user-error "Cannot delete locked %s%s" worktree
                    (if (stringp locked) (format " [reason: %s]" locked) "")))
      (when (file-exists-p worktree)
        (let (uncommitted)
          (magit-confirm
            (cond ((let ((default-directory worktree))
                     (or (magit-anything-modified-p)
                         (magit-untracked-files)))
                   (setq uncommitted 'danger))
                  (magit-delete-by-moving-to-trash 'trash)
                  ('delete))
            (format "%s worktree \"%s\"%s"
                    (if magit-delete-by-moving-to-trash "Trash" "Delete")
                    (file-name-nondirectory (directory-file-name worktree))
                    (if uncommitted " despite uncommitted changes" ""))
            nil nil (list worktree)))
        (if magit-delete-by-moving-to-trash
            (let ((delete-by-moving-to-trash t))
              (delete-directory worktree t t))
          (magit-call-git "worktree" "remove" "--force" worktree)))
      (if (file-exists-p default-directory)
          (magit-run-git "worktree" "prune")
        (let ((default-directory primary))
          (magit-run-git "worktree" "prune"))
        (when (derived-mode-p 'magit-status-mode)
          (kill-buffer)
          (magit-status-setup-buffer primary))))))