В macOS удалите завершенное связанное рабочее дерево из Терминала с помощью git worktree remove, но сначала проверьте, содержит ли оно изменения, которые вам еще нужны. Git удаляет чистое рабочее дерево; если в нем есть несохраненные изменения, процесс остановится, если не применить принудительное удаление. Чтобы сохранить незавершенную работу, закоммитьте ее или отправьте в stash перед удалением каталога. Не добавляйте --force только для того, чтобы обойти предупреждение Git: это может привести к безвозвратному удалению локальных файлов worktree. Эти шаги относятся к связанным рабочим деревьям, а не к основному рабочему каталогу репозитория. Документация Git по worktree

1. Найдите рабочее дерево и проверьте его состояние

Откройте Терминал и перейдите в основной репозиторий или любое связанное рабочее дерево, принадлежащее тому же репозиторию. Чтобы увидеть пути ко всем связанным worktree и их ветки, выполните:

git worktree list

Скопируйте точный путь к завершенному рабочему дереву. Затем проверьте его статус изнутри этого рабочего дерева, заключив путь в кавычки, если он содержит пробелы:

cd "/path/to/finished-worktree"
git status --short --branch

Вывод команды status позволяет выявить измененные или проиндексированные отслеживаемые файлы, а также неотслеживаемые файлы. Также проверьте рабочее дерево в Finder на наличие локальных файлов, от которых зависит ваш рабочий процесс. Файлы, игнорируемые Git, могут не отображаться в обычном выводе status. Если вы не уверены, можно ли удалять все содержимое каталога, остановитесь перед удалением и сделайте отдельную резервную копию или сохраните каталог. Рабочее дерево Git использует общие данные репозитория с основным рабочим деревом, но имеет собственный checkout и индекс; удаление checkout не является операцией резервного копирования. Документация Git по worktree

2. Сохраните изменения, которые хотите оставить

Если работа готова для сохранения в репозитории, закоммитьте ее в ветке рабочего дерева. Сначала проверьте статус и diff, затем проиндексируйте только те файлы, которые намерены включить, и закоммитьте их:

git diff
git add path/to/file
 git commit -m "Describe the finished work"

Удалите случайный начальный пробел перед git commit, если ваша командная оболочка обрабатывает его непредвиденным образом; корректный вид: git commit -m "Describe the finished work". Коммит сохраняет изменения в истории Git, но перед удалением рабочего дерева убедитесь, что он находится в нужной ветке.

Если работа еще не закончена, отправьте отслеживаемые правки и неотслеживаемые файлы в stash:

git stash push -u -m "Before removing finished worktree"
git stash list

Опция -u включает неотслеживаемые файлы. Игнорируемые файлы не включаются, поэтому сохраните любые игнорируемые локальные конфигурации, сгенерированные файлы или другие необходимые данные отдельно. Прежде чем продолжить, убедитесь, что новая запись stash появилась в списке. Записи stash принадлежат репозиторию, и позже вы сможете применить сохраненные изменения из другого рабочего дерева с помощью git stash apply stash@{0}; сначала проверьте номер записи, так как более поздние stash-записи могут изменить порядок в списке. Применение stash может привести к конфликтам, поэтому проверьте результат перед удалением записи из stash. Документация Git по stash

3. Удалите чистое рабочее дерево

После коммита или отправки нужных изменений в stash покиньте целевой каталог и выполните команду удаления из другого рабочего дерева того же репозитория. Используйте точный путь, выведенный командой git worktree list:

cd "/path/to/main-repository"
git worktree remove "/path/to/finished-worktree"
git worktree list

Повторный вызов list служит удобным подтверждением того, что Git больше не отображает этот checkout. Согласно документации Git, по умолчанию remove принимает только чистые рабочие деревья; неотслеживаемый файл или изменение в отслеживаемом файле могут предотвратить удаление. Документация Git по worktree

Если при удалении сообщается, что рабочее дерево не является чистым, не используйте команду git worktree remove --force, пока не решите, что каждый оставшийся локальный файл можно безвозвратно удалить. Вернитесь в это рабочее дерево, проверьте git status и сначала сохраните оставшиеся файлы или изменения. В частности, stash не включает игнорируемые файлы, а подмодуль может содержать собственные изменения, требующие отдельного внимания.

Если вы уже удалили папку в Finder

Если вы удалили каталог связанного рабочего дерева средствами системы вне Git, его служебная запись может остаться. Из основного репозитория выполните команду git worktree list и проверьте, помечен ли отсутствующий путь как prunable. В Git предусмотрена команда git worktree prune для удаления записей о рабочих деревьях, каталоги которых отсутствуют; она не восстанавливает удаленные файлы проекта. Используйте ее только после подтверждения того, что каталог действительно удален и его содержимое вам не нужно. В будущем для очистки используйте git worktree remove, чтобы Git обновлял метаданные рабочего дерева в процессе удаления. Документация Git по worktree

Безопасная очистка завершается удалением ненужного checkout, при этом все изменения, которые вы хотели сохранить, закоммичены или отправлены в stash, а все необходимые игнорируемые локальные файлы сохранены отдельно. Оставляйте рабочее дерево нетронутым всякий раз, когда вы не можете гарантировать, что оставшееся в нем содержимое вам больше не требуется.

Источники