Visual Studio Code: rimuovere i rami eliminati su GitHub che sono ancora visualizzati in VS Code?


93

In VSCode, dopo aver eseguito una richiesta pull ed eliminato il ramo su GitHub, quel ramo viene ancora visualizzato in Visual Studio Code. Se seleziono il ramo, dà un errore, come previsto.

Come rimuovo questi rami ora cancellati da VSCode - posso farlo automaticamente?


2
Per seguire (3 anni dopo), la risposta corretta per me è una combinazione di git fetch --pruneaggiornare / eliminare i riferimenti del ramo remoto e git branch -d <branch-name>eliminare il ramo locale ( -Dper forzare). Riavvia VSCode aggiorna la tavolozza
Drenai

Non è necessario riavviare VS Code, basta premere il pulsante Aggiorna nel menu di controllo del codice sorgente
AS

In realtà creo una funzione per gestirlo e scrivo un piccolo articolo su di esso. Link
davidhu

Risposte:


150

Apparentemente, questa caratteristica è intenzionale. Ho scoperto che un modo corretto per rimuovere tutti i rami remoti che sono stati eliminati da Github è eseguire il seguente comando.

git fetch --prune

Quindi riavvia Visual Studio per rimuovere i rami dalla tavolozza dei comandi


6
@ Brian, questo non rimuove le filiali locali che hai. Questo comando rimuove origin/branch_namedal menu git di cambio rapido su VSCode. Ad esempio, se si dispone di un ramo locale teste lo si invia a Github, ci sono due rami teste origin/testnel menu di git branch, lo sfoltimento rimuove solo il origin/testramo, non il testramo.
davidhu

@Brian Ho scoperto che questo cancellerebbe i rami eliminati in remoto dopo un riavvio di VS Code
David Wilton

questo comando non funziona. Vedo ancora tutti i rami nell'elenco sia quando esegui il comando git brancho fai clic sul nome del ramo per vedere un menu a discesa con tutti i rami disponibili
Anna Olshevskaia

@AnnaOlshevskaia git branchelenca solo i rami locali, questo comando dovrebbe rimuovere i remotes/branch_namerami. Prova git branch -aa vedere tutto.
davidhu

2
Non è necessario riavviare VS Code, basta premere il pulsante Aggiorna nel menu di controllo del codice sorgente
AS

72

I rami locali possono essere rimossi da Visual Studio Code aprendo il riquadro dei comandi (Ctrl-Shift-P) quindi selezionando Git: Elimina ramo ... , è quindi possibile eliminare il ramo locale selezionando quello appropriato dall'elenco.


1
Non l'ho testato, ma sembra mostrare solo le filiali locali, quindi dovrebbe funzionare come descritto.
jave.web

2
@TylerBell Come ha già detto, è il metodo per rimuovere il ramo locale non il ramo remoto.
Anbuselvan Rocky

2
questa avrebbe dovuto essere la risposta. non so perché ero così stupido da non saperlo da solo. grazie @ matthew-disney-cook
Serzhan Akhmetov,

17

I rami rimossi da GitHub sono benissimo ... appena rimossi da GitHub. Hai ancora una copia locale di branch sulla tua macchina. Per eliminare il ramo locale, esegui git branch -d the_local_branch. Non esiste un comando in VS Code per farlo, ma puoi avviare il terminale in VSCode usando il View: Toggle Integrated Terminalcomando ed eseguire il comando da esso.

Per ulteriori informazioni sulla gestione delle filiali, visita la documentazione di git: https://git-scm.com/book/be/v2/Git-Branching-Branch-Management


Hey grazie. Sì, al momento uso i comandi git .. ma speravo che vscode git sync individuasse che il telecomando li aveva rimossi o li evidenziasse. Immagino di no :-)
Drenai

Piuttosto stupido che non supportano i comandi git nativi all'interno della loro riga di comando git. Mal progettato.
Steven

anche in attesa di proroga qui :)
Marko

1
Si prega di vedere la risposta sopra da @ matthew-disney-cook
Orangutech


9

Ho interpretato la domanda come: come posso eliminare i miei rami locali che sono stati uniti, dato che sto usando Git Fetch (Prune) dalla palette dei comandi. Questo può essere considerato un "hack", ma è quello che uso io. Nel terminale di PowerShell:

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

Nel caso in cui non hai familiarità con PoSH, ecco cosa fa: la prima riga ottiene il nome di tutti i rami uniti (ad eccezione di sviluppo e master), e la seconda riga scorre l'elenco ed esegue "git branch -d ". Finché il ramo è completamente unito, dovresti vedere:

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

per ogni ramo. Di tanto in tanto mi imbatto in un ramo che non riesce ad essere cancellato - se ciò accade, e sei sicuro che sia sicuro da eliminare (cioè non perderai il lavoro locale che non è stato memorizzato), puoi eseguire:

git branch <branch name> -D

Nota la D maiuscola - che elimina forzatamente il ramo locale.


Questo è un pazzo comando di PowerShell😊 Devo dare un voto positivo per il coraggio per averlo eseguito sul tuo repository
Drenai

2
C'è una linea sottile tra genio e follia. Questo è ben lontano da quella linea, sul lato della follia.
Darren G

1
No non lo è. Non è così complesso quando lo guardi, e comunque, è solo una traduzione powershell delle risposte da qui: stackoverflow.com/questions/6127328/…
Scott Stafford

@ScottStafford Per me un comando di 170 caratteri per eliminare i rami è sul lato complesso del simple | complexdivario😉
Drenai

7

Tutto quello che devi fare è eseguire questo comando:

git remote prune origin

Qualcosa in più che puoi fare, perché a volte è fastidioso aprire un terminale solo per questo .. puoi aggiungere un'attività in vscode.

Per farlo, segui questi passaggi:

  1. In VSCode Visualizza> Tavolozza dei comandi (cmd / ctrl + Maiusc + P)
  2. digitare Configura attività
  3. Seleziona Crea file tasks.json dal modello e un nuovo file verrà creato nella cartella .vscode .
  4. All'interno dell'array delle attività aggiungere questo:

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

Come usarlo:

  1. Apri la tavolozza dei comandi
  2. Digita Esegui attività e selezionalo
  3. Seleziona Git Prune

Riferimento:

  1. Git prugna secca

Sai se git remote prune origindifferisce dalla risposta accettata di git fetch --prune? Il dettaglio Esegui attività è fantastico, grazie per averlo pubblicato
Drenai

@Drenai No, sono la stessa cosa. Ma per una risposta completa guarda qui
Bogdan Alexandru Militaru

5

Puoi rimuovere tutti i rami locali (eccetto il master) con:

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

E puoi rimuovere tutti i rami che appaiono ancora come origin/XXXXin VSCode ma già eliminati origincon:

git fetch --prune

Nota:

Il primo comando sopra (preso da https://stackoverflow.com/a/52006270/3120163 ):

  • elenca tutti i rami
  • rimuovere il ramo principale dall'elenco
  • eliminare i rami nell'elenco

Sarebbe bello se potessi aggiungere una spiegazione di quel primo comando - è molto utile 👍
Drenai

2
Ho aggiunto una spiegazione @Drenai
Adrien Renaud

4

Ho trovato un modo per risolvere questo problema. Quindi è necessario rimuovere il telecomando che si collega al repository Github, quindi aggiungere di nuovo il telecomando.

Tutti i rami eliminati da Github non verranno più visualizzati in vscode. Supponendo che originsia il nome del repository remoto.

git remote remove origin

Poi

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

1
non che io sappia. È l'unico modo che ho scoperto per rimuovere i rami remoti che non esistono più.
davidhu


1

Non è più necessario git fetch --pruneriavviare VSCode.
Con VSCode 1.52 (novembre 2020), ora hai:

Git: pota al recupero

Abilitando l' git.pruneOnFetchimpostazione, VS Code verrà eseguito git fetch --prunedurante il recupero dei riferimenti remoti.

Non più branch extra localmente una volta che sono stati eliminati da GitHub.

Vedere PR 89249 , risoluzione del problema 86813 :

Utilizzo:

{
   "git.pruneOnFetch": true
}

L'impostazione è falsepredefinita.

Ciò aggiungerebbe il --pruneflag a tutti i recuperi git.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.