Visual Studio Code - remove branches excluídos no GitHub que ainda aparecem no VS Code?

88

No VSCode, depois que faço uma solicitação de pull e excluo o branch no GitHub, esse branch ainda aparece no Visual Studio Code. Se eu selecionar o ramo, dá um erro, como esperado.

Como faço para remover esses branches agora excluídos do VSCode - posso fazer isso automaticamente?

Drenai
fonte
2
Para acompanhar (3 anos depois), a resposta correta para mim é uma combinação de git fetch --pruneatualizar / excluir referências de branch remoto e git branch -d <branch-name>excluir o branch local ( -Dpara forçar). Reiniciar paleta de atualizações do VSCode
Drenai
Não há necessidade de reiniciar o VS Code, basta clicar no botão Atualizar no menu de controle de fonte
AS
Na verdade, eu construo uma função para lidar com isso e escrevo um pequeno artigo sobre isso. Link
davidhu

Respostas:

144

Aparentemente, esse recurso é intencional. Descobri que uma maneira correta de remover todos os branches remotos que foram excluídos do Github é executar o seguinte comando.

git fetch --prune

Em seguida, reinicie o Visual Studio para remover os ramos da paleta de comandos

Davidhu
fonte
6
@Brian, isso não remove nenhum branch local que você tenha. Este comando remove o origin/branch_namedo menu git de mudança rápida no VSCode. Por exemplo, se você tiver um branch local teste enviá-lo para o Github, existem dois branches test, e origin/testno menu do branch git, a poda remove apenas o origin/testbranch, não o testbranch.
Davidhu
@Brian Descobri que isso limparia os branches remotos excluídos após o reinício do VS Code
David Wilton
este comando não funciona. Ainda vejo todos os branches na lista quando faço o comando git branchou clico no nome do branch para ver uma lista suspensa com todos os branches disponíveis
Anna Olshevskaia
@AnnaOlshevskaia git branchlista apenas os branches locais, este comando supostamente remove os remotes/branch_namebranches. Tente git branch -aver tudo.
davidhu
2
Não há necessidade de reiniciar o VS Code, basta clicar no botão Atualizar no menu de controle de fonte
AS
67

Os branches locais podem ser removidos do Visual Studio Code abrindo o Command Pallete (Ctrl-Shift-P) e selecionando Git: Delete Branch ... , você pode excluir o branch local selecionando o apropriado na lista.

Matthew Disney-Cook
fonte
1
Não testei completamente, mas parece mostrar apenas branches locais, então deve funcionar conforme descrito.
jave.web
2
@TylerBell Como ele já disse, é o método de remover o branch local, não o branch remoto.
Anbuselvan Rocky
2
esta deveria ter sido a resposta. não sei por que fui tão estúpido a ponto de não saber disso. obrigado @ matthew-disney-cook
Serzhan Akhmetov
16

Ramificações removidas do GitHub estão bem ... apenas removidas do GitHub. Você ainda tem uma cópia local do branch em sua máquina. Para excluir a execução de filial local git branch -d the_local_branch. Não há nenhum comando no VS Code para fazer isso, mas você pode iniciar o terminal no VSCode usando o View: Toggle Integrated Terminalcomando e executar o comando a partir dele.

Para obter mais informações sobre o gerenciamento de filiais, visite a documentação do git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management

Krzysztof Cieslak
fonte
Ei, obrigado. Sim, eu uso os comandos git no momento .. mas esperava que vscode git sync detectasse que o controle remoto os removeu - ou realçaria. Acho que não :-)
Drenai
Bastante estúpido que eles não suportam comandos git nativos dentro de sua linha de comando git. Mal projetado.
Steven
também esperando por prorrogação aqui :)
Marko
1
Por favor, veja a resposta acima de @ matthew-disney-cook
Orangutech
15

Abra a paleta de comandos (Ctrl + Shift + P) e selecione Git: Fetch (Prune) .

Este recurso foi incorporado ao VS Code em 20 de novembro de 2018.

tgr42
fonte
1
existe uma maneira de tornar esse comportamento padrão de git pull em vscode?
Tuncay Göncüoğlu
9

Eu interpretei a pergunta como: como posso excluir meus branches locais que foram mesclados, já que estou usando Git Fetch (Prune) na paleta de comandos. Isso pode ser considerado um "hack", mas é o que eu uso. No terminal PowerShell:

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

Caso você não esteja familiarizado com PoSH, aqui está o que ele faz: a primeira linha obtém o nome de todos os ramos mesclados (com exceção de desenvolver e mestre), e a segunda linha faz um loop por essa lista e executa "git branch -d " Contanto que o branch esteja completamente mesclado, você verá:

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

para cada ramo. Ocasionalmente, encontro um branch que não consegue ser excluído - se isso acontecer e você tiver certeza de que é seguro ser excluído (ou seja, você não perderá o trabalho local que não foi armazenado), você pode executar:

git branch <branch name> -D

Observe o D maiúsculo - que exclui à força a filial local.

Darren G
fonte
Esse é um comando louco do PowerShell😊 Eu tenho que dar um voto positivo por bravura por executá-lo no seu repo
Drenai
2
Existe uma linha tênue entre gênio e insanidade. Isso está bem longe dessa linha, no lado da insanidade.
Darren G
1
Não, não é. Não é tão complexo quando você olha para ele e, de qualquer maneira, é apenas uma tradução poderosa das respostas daqui: stackoverflow.com/questions/6127328/…
Scott Stafford
@ScottStafford Para mim, um comando de 170 caracteres para excluir branches está no lado complexo da simple | complexdivisão😉
Drenai
6

Tudo que você precisa fazer é executar este comando:

git remote prune origin

Algo extra que você pode fazer, porque às vezes é chato abrir um terminal só para isso .. você pode adicionar uma tarefa no vscode.

Para fazer isso, siga estas etapas:

  1. Em VSCode View> Command Palette (cmd / ctrl + Shift + P)
  2. digite Configurar Tarefa
  3. Selecione Criar arquivo tasks.json do modelo e um novo arquivo será criado na pasta .vscode .
  4. Dentro da matriz de tarefas, adicione isto:

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

Como usá-lo:

  1. Abrir paleta de comandos
  2. Digite Executar Tarefa e selecione-o
  3. Selecione Git Prune

Referência:

  1. Ameixa git
Bogdan Alexandru Militaru
fonte
Você sabe se git remote prune origindifere da resposta aceita de git fetch --prune? O detalhe de Executar Tarefa é ótimo, obrigado por postá-lo
Drenai
@Drenai Não, eles são iguais. Mas para uma resposta completa, olhe aqui
Bogdan Alexandru Militaru
5

Você pode remover todos os branches locais (exceto master) com:

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

E você pode remover todos os ramos que ainda aparecem como origin/XXXXno VSCode, mas já excluídos origincom:

git fetch --prune

Nota:

O primeiro comando acima (retirado de https://stackoverflow.com/a/52006270/3120163 ):

  • liste todos os ramos
  • remova o branch master da lista
  • exclua os ramos da lista
Adrien Renaud
fonte
Seria ótimo se você pudesse adicionar uma explicação sobre o primeiro comando - é muito útil 👍
Drenai
2
Eu adicionei uma explicação @Drenai
Adrien Renaud
4

Eu encontrei uma maneira de consertar isso. Portanto, você precisa remover o controle remoto vinculado ao repositório Github e, em seguida, adicionar o controle remoto novamente.

Todos os branches que são excluídos do Github não serão mais exibidos no vscode. Supondo que esse originseja o nome do repo remoto.

git remote remove origin

Então

git remote add origin [email protected]:your-username/repo-name.git
Davidhu
fonte
1
não que eu saiba. É a única maneira que encontrei de remover os branches remotos que não existem mais.
davidhu
3

O comando mais curto é:

git fetch -p
Al Gol
fonte