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


88

У VSCode, після того як я роблю запит на витягування та видаляю гілку на GitHub, ця гілка все ще відображається в Visual Studio Code. Якщо я виберу гілку, це видасть помилку, як очікувалося.

Як видалити ці видалені гілки з VSCode - чи можна це зробити автоматично?


2
Щоб продовжити (3 роки пізніше), правильною відповіддю для мене є поєднання git fetch --pruneоновлення / видалення посилань на віддалені гілки та git branch -d <branch-name>видалення локальної гілки ( -Dдля примусу). Перезапуск VSCode оновлює палітру
Drenai

Не потрібно перезапускати код VS, просто натисніть кнопку Refresh у меню Source Control
ЯК

Я насправді будую функцію, яка справляється з цим, і пишу про це невелику статтю. Посилання
davidhu

Відповіді:


145

Мабуть, ця особливість навмисна. Я з’ясував, що правильним способом видалення всіх віддалених гілок, які були видалені з 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 Code, просто натисніть кнопку Refresh у меню Source Source
ЯК

67

Локальні гілки можна видалити з коду Visual Studio, відкривши Панель команд (Ctrl-Shift-P), потім вибравши Git: Видалити гілку ... , потім можна видалити локальну гілку, вибравши відповідну зі списку.


1
Не перевіряйте, але він, здається, показує лише локальні гілки, тому він повинен працювати, як описано.
jave.web

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-command. Погано розроблений.
Стівен

також чекаю продовження тут :)
Марко

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, ось що це робить: перший рядок отримує ім'я всіх об'єднаних гілок (за винятком розробників і майстрів), а другий рядок перебирає цей список і запускає "git branch -d ". Поки гілка повністю злита, ви побачите:

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

для кожної гілки. Іноді я натрапляю на гілку, яку не вдається видалити - якщо це трапиться, і ви впевнені, що видалення безпечно (тобто ви не втратите локальну роботу, яка не була збережена), ви можете запустити:

git branch <branch name> -D

Зверніть увагу на велику величину D - яка примусово видаляє місцеву гілку.


Це одна божевільна команда PowerShell😊, я повинен дати голос за відвагу за те, щоб запустити це у вашому репо
Дренай

2
Існує тонка грань між геніальністю та божевіллям. Це далеко від цієї лінії, з боку божевілля.
Даррен Г

1
Ні це не так. Коли ви дивитесь на це, це не так складно, і в будь-якому разі, це просто переклад відповідей звідси: stackoverflow.com/questions/6127328/…
Скотт Стаффорд,

@ScottStafford Для мене команда на 170 символів для видалення гілок знаходиться на складній стороні simple | complexрозділу😉
Drenai,

6

Все, що вам потрібно зробити, це виконати цю команду:

git remote prune origin

Щось зайве, що ви можете зробити, тому що іноді дратує відкривати термінал саме для цього .. Ви можете додати завдання у vscode.

Для цього виконайте такі дії:

  1. У перегляді VSCode > Палітра команд (cmd / ctrl + Shift + P)
  2. типу Налаштувати завдання
  3. Виберіть Створити файл task.json із шаблону, і новий файл буде створений у папці .vscode .
  4. До масиву завдань додайте це:

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

Як користуватися ним:

  1. Відкрийте командну палітру
  2. Введіть " Виконати завдання" та виберіть його
  3. Виберіть Git Prune

Довідково:

  1. Git чорнослив

Чи знаєте ви, чи git remote prune originвідрізняється від прийнятої відповіді git fetch --prune? Подробиці "Виконати завдання" чудові, дякую, що ви їх опублікували
Дренай

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

5

Ви можете видалити всі локальні гілки (крім головного) за допомогою:

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
Adrien Renaud

4

Я знайшов спосіб це виправити. Тож вам потрібно видалити пульт, який посилається на репозитарій Github, а потім знову додати пульт.

Усі гілки, видалені з Github, більше не відображатимуться у vscode. Припускаючи, що originце назва віддаленого репо.

git remote remove origin

Тоді

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

1
не те, що я знаю. Це єдиний спосіб, який я виявив, що видалить віддалені гілки, яких більше не існує.
davidhu

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.