Чтобы проверить, безопасно ли удалять локальную ветку Git в macOS, проверьте рабочее дерево, сравните коммиты ветки с веткой, которую вы планируете сохранить, и убедитесь, что она не используется в другом рабочем дереве (worktree). Откройте Терминал, перейдите в репозиторий и используйте проверку объединенных веток Git как ориентир, а не как стопроцентную гарантию того, что ветка больше не представляет ценности. Если вы не уверены, сохраняйте ветку до тех пор, пока не подтвердите, что проделанная работа сохранена.

1. Откройте репозиторий и проверьте наличие незавершенных изменений

Откройте Терминал из папки «Программы» > «Утилиты» или найдите его через Spotlight. Apple указывает zsh в качестве оболочки по умолчанию в Терминале, и приведенные ниже команды работают в стандартной конфигурации macOS. В Терминале перейдите в каталог репозитория; заключите путь в кавычки, если он содержит пробелы:

cd "/path/to/your/repository"
git status --short --branch

Вывод команды status показывает текущую активную ветку и наличие изменений в файлах. Зафиксируйте (commit) или сохраните иным образом нужные изменения файлов перед переключением веток. Эта проверка не зависит от истории ветки: чистое рабочее дерево не означает, что коммиты ветки были объединены. Точно так же незафиксированные изменения не защищены лишь потому, что вы удаляете ветку со стандартным флагом безопасного удаления Git.

2. Проверьте, объединена ли ветка с нужной целевой веткой

Сначала определите ветку, которую вы планируете сохранить, обычно это main или develop. Если вы в данный момент находитесь на ветке-кандидате на удаление, переключитесь на целевую ветку, прежде чем что-либо удалять. Замените feature/example и main ниже на ваши фактические имена веток:

git switch main
git branch --merged main
git branch --no-merged main

Первый список содержит локальные ветки, вершины которых достижимы из main; второй перечисляет ветки, вершины которых недостижимы. В документации Git указано, что git branch --merged выводит список веток, объединенных с указанным коммитом (или HEAD, если коммит не указан). Это проверка истории коммитов, поэтому она полезна только тогда, когда именно main является веткой, которая должна содержать внесенные изменения. Ветка, объединенная с другой веткой релиза или интеграции, все еще может отображаться как необъединенная по отношению к main. Документация к команде Git branch

Если ветка-кандидат отображается в списке --merged main, это весомый признак того, что ее коммиты уже достижимы из main. Убедитесь, что нужная функция или исправление присутствуют там, где ожидается, особенно если ваша команда использует пул-реквесты, релизные ветки или другую цель для слияния. Если она отображается в --no-merged, не удаляйте ее, пока не проверите, какие коммиты являются уникальными для нее.

3. Проверьте коммиты и отслеживание вышестоящей ветки (upstream)

Чтобы сравнить ветку-кандидат с целевой веткой, используйте:

git log --oneline main..feature/example

Это покажет коммиты, достижимые из feature/example, которые недостижимы из main. Если команда выводит коммиты, изучите их и решите, нужно ли их объединить, перенести с помощью cherry-pick или сохранить. Пустой результат означает, что у ветки-кандидата нет коммитов, опережающих main в данном сравнении; это не доказывает, что имя ветки или ее назначение больше не нужны.

Ветка также может отслеживать удаленную ветку. Проверьте информацию об отслеживании с помощью:

git branch -vv

Upstream — это настроенная ссылка, используемая Git для таких операций, как pull и push. Отсутствующая или удаленная (gone) вышестоящая ветка не доказывает, что локальную ветку безопасно удалять: ее коммиты все еще могут быть уникальными. Кроме того, ссылка отслеживания удаленной ветки может быть устаревшей, пока вы не выполните fetch. Если вы хотите обновить данные отслеживания удаленного репозитория, команда git fetch --prune origin получает данные из origin и удаляет устаревшие ссылки удаленного отслеживания в соответствии с refspec этого удаленного репозитория; она не удаляет вашу локальную ветку. Документация к команде Git fetch

4. Проверьте рабочие деревья (worktrees), затем выполните безопасное удаление

Ветка может быть активна в другом связанном рабочем дереве (worktree). Git отказывается удалять ветку, которая извлечена в данный момент, поэтому, если в удалении отказано, проверьте git worktree list и изучите указанные каталоги, прежде чем предпринимать дальнейшие действия. Также убедитесь, что ветка-кандидат не является вашей текущей веткой; сначала переключитесь на предполагаемую целевую ветку. Документация к команде Git branch

Убедившись, что результаты работы сохранены, а ветка больше не нужна, удалите ее с помощью встроенного безопасного флага Git:

git branch -d feature/example

Git разрешает использование флага -d только тогда, когда ветка полностью объединена со своей настроенной вышестоящей веткой (upstream) или с HEAD, если вышестоящая ветка не настроена. Если Git выдает отказ, расценивайте это как повод разобраться. Флаг -D принудительно удаляет ветку независимо от статуса слияния; он обходит эту защиту и не должен использоваться в качестве повседневного решения. Документация к команде Git branch

Принять взвешенное решение просто: удаляйте с помощью -d только после того, как работа из ветки-кандидата окажется в целевом назначении, уникальные коммиты будут просмотрены, и ни одно рабочее дерево больше не будет использовать эту ветку. Если хоть один из этих пунктов вызывает сомнения, сохраните ветку и сначала уточните статус изменений.

Источники