Код Visual Studio - удалить ветки, удаленные на GitHub, которые все еще отображаются в VS Code?


88

В VSCode после того, как я выполняю запрос на перенос и удаляю ветку на GitHub, эта ветка все еще отображается в Visual Studio Code. Если я выберу ветку, она, как и ожидалось, выдаст ошибку.

Как мне удалить эти теперь удаленные ветки из VSCode - могу ли я сделать это автоматически?


2
Чтобы продолжить (3 года спустя), правильный ответ для меня - это сочетание git fetch --pruneобновления / удаления ссылок на удаленные ветки и git branch -d <branch-name>удаления локальной ветки ( -Dдля принудительного выполнения). Перезапуск VSCode обновляет палитру
Дренай

Нет необходимости перезагрузить VS код, просто нажмите кнопку Обновить в меню Control Source
AS

На самом деле я создаю функцию, которая справляется с этим, и пишу об этом небольшую статью. Ссылка
davidhu

Ответы:


144

Судя по всему, это сделано намеренно. Я обнаружил, что правильный способ удалить все удаленные ветки, которые были удалены из Github, - это выполнить следующую команду.

git fetch --prune

Затем перезапустите Visual Studio, чтобы удалить ветви из палитры команд.


6
@Brian, это не удаляет ваши локальные ветки. Эта команда удаляет origin/branch_nameиз меню быстрого переключения git в VSCode. Например, если у вас есть локальная ветка testи вы отправили ее в Github, есть две ветки test, и origin/testв меню ветки git удаление удаляет только origin/testветку, а не testветку.
davidhu

@Brian: Я обнаружил, что это очистит удаленные удаленные ветки после перезапуска VS Code
Дэвид Уилтон,

эта команда не работает. Я все еще вижу все ветки в списке, когда выполняю команду git branchили нажимаю на название ветки, чтобы увидеть раскрывающийся список со всеми доступными ветвями
Анна Ольшевская

@AnnaOlshevskaia git branchперечисляет только локальные ветки, эта команда должна удалять remotes/branch_nameветки. Попробуй git branch -aвсе увидеть.
davidhu

2
Нет необходимости перезагрузить VS код, просто нажмите кнопку Обновить в меню Control Source
AS

67

Локальные ветки можно удалить из кода Visual Studio, открыв палитру команд (Ctrl-Shift-P), затем выбрав Git: Удалить ветвь ... , затем вы можете удалить локальную ветвь, выбрав соответствующую из списка.


1
Не тестировал его, но, похоже, он показывает только локальные ветки, поэтому он должен работать, как описано.
jave.web 07

2
@TylerBell Как он уже сказал, это метод удаления локальной ветки, а не удаленной ветки.
Анбусельван Рокки

2
это должен был быть ответ. Не знаю, почему я был таким глупым, что сам этого не знал. спасибо @ matthew-disney-cook
Сержан Ахметов

16

Ветки, удаленные из GitHub, хорошо ... просто удалены из GitHub. У вас все еще есть локальная копия ветки на вашем компьютере. Чтобы удалить локальную ветку, запустите git branch -d the_local_branch. В VS Code нет команды для этого, но вы можете запустить терминал в VSCode с помощью View: Toggle Integrated Terminalкоманды и запустить команду из него.

Для получения дополнительной информации об управлении филиалами посетите документацию git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management.


Привет спасибо. Да, в настоящее время я использую команды git ... но надеялся, что vscode git sync обнаружит, что их удалил пульт, или выделит их. Думаю, нет :-)
Дренай

Довольно глупо, что они не поддерживают собственные команды git в своей командной строке git. Плохо спроектирован.
Стивен

также ждем продления здесь :)
Марко

1
См. Ответ @ matthew-disney-cook выше
Orangutech,


9

Я интерпретировал вопрос следующим образом: как я могу удалить свои локальные ветки, которые были объединены, поскольку я использовал Git Fetch (Prune) из палитры команд. Это можно рассматривать как «взлом», но я использую именно его. В терминале PowerShell:

$branches = (git branch --merged).replace(" ", "").replace("*", "") | ? { $_ -ne "develop" -and $_ -ne "master" }
foreach ($branch in $branches) { git branch $branch -d }

Если вы не знакомы с PoSH, вот что он делает: первая строка получает имя всех объединенных веток (за исключением разработки и master), а вторая строка проходит через этот список и запускает «git branch -d ". Пока ветка полностью объединена, вы должны увидеть:

Deleted branch <branch name> (was <commit ID>).

для каждой ветки. Иногда я сталкиваюсь с веткой, которую не удается удалить - если это произойдет, и вы уверены, что ее можно удалить безопасно (т.е. вы не потеряете локальную работу, которая не была сохранена), вы можете запустить:

git branch <branch name> -D

Обратите внимание на заглавную букву D - это принудительно удаляет локальную ветку.


Это одна безумная команда PowerShell😊 Я должен проголосовать за то, чтобы запустить ее на вашем
репозитории,

2
Между гением и безумием тонкая грань. Это далеко от этой черты, на стороне безумия.
Darren G

1
Нет, это не так. Это не так сложно, когда вы смотрите на это, и в любом случае это просто перевод ответов
Скотт Стаффорд

@ScottStafford Для меня 170-символьная команда для удаления веток - это сложная часть simple | complexраздела 😉
Дренай

6

Все, что вам нужно сделать, это запустить эту команду:

git remote prune origin

Что-то еще, что вы можете сделать, потому что иногда раздражает открывать терминал только для этого ... вы можете добавить задачу в vscode.

Для этого выполните следующие действия:

  1. В VSCode View> Command Palette (cmd / ctrl + Shift + P)
  2. введите Настроить задачу
  3. Выберите Создать файл tasks.json из шаблона, и новый файл будет создан в папке .vscode .
  4. Внутри массива задач добавьте следующее:

{"label": "Git Prune", "type": "shell", "command": "git remote prune origin", "problemMatcher": []}

Как это использовать:

  1. Открыть палитру команд
  2. Введите " Выполнить задачу" и выберите ее.
  3. Выберите Git Prune

Справка:

  1. Git prune

Вы знаете, git remote prune originотличается ли он от принятого ответа git fetch --prune?
Детализация

@Drenai Нет, они такие же. Но для полного ответа смотрите здесь
Богдан Александру Милитару

5

Вы можете удалить все локальные ветки (кроме master) с помощью:

git branch -r | grep -v "master" | xargs git branch -D

И вы можете удалить все ветки, которые все еще появляются, как origin/XXXXв VSCode, но уже удалены, originс помощью:

git fetch --prune

Заметка:

Первая команда выше (взята из https://stackoverflow.com/a/52006270/3120163 ):

  • перечислить все филиалы
  • удалить главную ветку из списка
  • удалить ветки в списке

Было бы здорово, если бы вы могли добавить объяснение этой первой команды - это очень удобно 👍
Дренай

2
Я добавил объяснение @Drenai
Адриен Рено

4

Я нашел способ исправить это. Поэтому вам нужно удалить пульт, который ссылается на репозиторий Github, а затем снова добавить пульт.

Все ветки, удаленные из Github, больше не будут отображаться в vscode. Предполагая, что originэто имя удаленного репо.

git remote remove origin

затем

git remote add origin git@github.com:your-username/repo-name.git

1
не то, что я знаю из. Это единственный способ удалить удаленные ветки, которые больше не существуют.
Давидху

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.