it-swarm.it

Come faccio a eliminare un ramo Git localmente e da remoto?

Voglio eliminare un ramo sia localmente che remotamente.

Tentativi non riusciti di eliminare il ramo remoto:

$ git branch -d remotes/Origin/bugfix
error: branch 'remotes/Origin/bugfix' not found.

$ git branch -d Origin/bugfix
error: branch 'Origin/bugfix' not found.

$ git branch -rd Origin/bugfix
Deleted remote branch Origin/bugfix (was 2a14ef7).

$ git Push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> Origin/bugfix
Already up-to-date.

Cosa dovrei fare in modo diverso per cancellare con successo il ramo remotes/Origin/bugfix sia localmente che remotamente?

15136
Matthew Rankin

Sintesi

$ git Push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

Si noti che nella maggior parte dei casi il nome remoto è Origin.

Elimina il ramo locale

Per eliminare il ramo local utilizzare uno dei seguenti:

$ git branch -d branch_name
$ git branch -D branch_name

Nota: L'opzione -d è un alias per --delete, che elimina solo il ramo se è già stato completamente unito nel relativo ramo upstream. Puoi anche utilizzare -D, che è un alias per --delete --force, che elimina il ramo "indipendentemente dal suo stato unito". [Fonte: man git-branch]

Elimina filiale remota [Aggiornato l'8-settembre-2017]

A partire da Git v1.7.0 , puoi cancellare aremotobranch usando

$ git Push <remote_name> --delete <branch_name>

che potrebbe essere più facile da ricordare di

$ git Push <remote_name> :<branch_name>

che è stato aggiunto in Git v1.5.0 "per eliminare un ramo remoto o un tag."

A partire da Git v2.8.0 puoi anche usare git Push con l'opzione -d come alias per --delete.

Pertanto, la versione di Git che hai installato determinerà se è necessario utilizzare la sintassi più facile o più difficile.

Elimina il ramo remoto [Risposta originale del 5 gennaio 2010]

Dal capitolo 3 di Pro Git di Scott Chacon:

Eliminazione di rami remoti

Supponiamo che tu abbia finito con un ramo remoto - diciamo, tu e i tuoi collaboratori avete finito con una funzione e l'avete fusa nel ramo principale del telecomando (o in qualunque ramo si trovi la vostra linea di codice stabile). Puoi eliminare un ramo remoto usando la sintassi piuttosto git Push [remotename] :[branch]. Se si desidera eliminare il ramo di correzione del server dal server, si esegue quanto segue:

$ git Push Origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Niente più diramazioni sul tuo server. Potresti voler ascoltare questa pagina, perché avrai bisogno di quel comando, e probabilmente dimenticherai la sintassi. Un modo per ricordare questo comando è richiamando la sintassi git Push [remotename] [localbranch]:[remotebranch] che è andata un po 'prima. Se lasci la porzione [localbranch], allora stai praticamente dicendo: "Non prendere niente dalla mia parte e renderlo [remotebranch]".

Ho emesso git Push Origin :bugfix e ha funzionato magnificamente. Scott Chacon aveva ragione - io vorrò orecchio cane quella pagina (o virtualmente orecchio cane rispondendo a questo su Stack Overflow).

Quindi dovresti eseguirlo su altre macchine

git fetch --all --Prune

per propagare le modifiche.

18919
Matthew Rankin

La risposta di Matthew è ottima per rimuovere i rami {remote e apprezzo anche la spiegazione, ma per fare una semplice distinzione tra i due comandi:

Per rimuovere aramo localedalla tua macchina:

git branch -d {the_local_branch} (usa -D per forzare l'eliminazione del ramo senza controllare lo stato unito)

Per rimuovere aramo remotodal server:

git Push Origin --delete {the_remote_branch}

Riferimento: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote

3016
Eric Brotto

Le risposte brevi

Se desideri spiegazioni più dettagliate dei seguenti comandi, consulta le risposte lunghe nella prossima sezione.

Eliminazione di un ramo remoto:

git Push Origin --delete <branch>  # Git version 1.7.0 or newer
git Push Origin :<branch>          # Git versions older than 1.7.0

Eliminazione di una filiale locale:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

Eliminazione di un ramo di localizzazione remota locale:

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --Prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

La lunga risposta: ci sono 3 diversi rami da eliminare!

Quando hai a che fare con l'eliminazione dei rami sia a livello locale che remoto, tieni presente che ci sono 3 diversi rami coinvolti :

  1. Il ramo locale X.
  2. Il ramo di origine remoto X.
  3. Il ramo locale di localizzazione remota Origin/X che tiene traccia del ramo remoto X.

Visualization of 3 branches

Il poster originale usato

git branch -rd Origin/bugfix

che ha eliminato solo il suo ramo di localizzazione remota locale Origin/bugfix, e non il ramo remoto effettivo bugfix su Origin.

Diagram 2

Per eliminare quel ramo remoto effettivo , è necessario

git Push Origin --delete bugfix

Diagram 3

Dettagli aggiuntivi

Le seguenti sezioni descrivono ulteriori dettagli da considerare quando si eliminano i rami remoti e di localizzazione remota.

Se si preme per eliminare i rami remoti, vengono eliminati anche i rami di tracciamento remoto

Si noti che l'eliminazione del ramo remoto X dalla riga di comando utilizzando un git Push eliminerà anche il ramo di localizzazione remota locale Origin/X, quindi non è necessario Potare il ramo di remote-tracking obsoleto con git fetch --Prune o git fetch -p, sebbene non sarebbe male se lo facessi comunque.

È possibile verificare che il ramo di tracciamento remoto Origin/X sia stato eliminato eseguendo quanto segue:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Eliminazione del ramo di tracciamento remoto locale obsoleto Origine/X

Se non hai eliminato il ramo remoto X dalla riga di comando (come sopra), allora il repository locale conterrà ancora un ramo Origin/X (ora obsoleto). Questo può accadere se si elimina un ramo remoto direttamente attraverso l'interfaccia web di GitHub, ad esempio.

Un modo tipico per rimuovere questi rami obsoleti di tracciamento remoto (a partire dalla versione 1.6.6 di Git) è semplicemente eseguire git fetch con --Prune o inferiore -p. Nota che questo rimuove tutti i rami obsoleti locali di tracciamento remoto per eventuali rami remoti che non esistono più sul telecomando :

git fetch Origin --Prune
git fetch Origin -p # Shorter

Ecco la citazione pertinente dal 1.6.6 note di rilascio (sottolinea il mio):

"git fetch" appreso --all e --multipleoptions, per eseguire il recupero da molti repository e--Prune opzione per rimuovere i rami di monitoraggio remoto che sono andati in stallo. Questi renderanno "git remote update" e "git remote Prune" meno necessari (non vi è alcun piano per rimuovere "remote update", né "remote Prune", comunque).

Alternativa alla potatura automatica di cui sopra per i rami obsoleti di localizzazione remota

In alternativa, invece di eliminare i rami obsoleti locali di localizzazione remota tramite git fetch -p, puoi evitare di eseguire l'operazione extra di rete rimuovendo manualmente i branch con i flag --remote o -r:

git branch --delete --remotes Origin/X
git branch -dr Origin/X # Shorter

Guarda anche

1743
user456814

Passi per l'eliminazione di un ramo:

Per eliminare il ramo remoto:

git Push Origin --delete <your_branch> 

Per eliminare il branch locale , hai three ways :

1: git branch -D <branch_name> 

2: git branch --delete --force <branch_name>  //same as -D

3: git branch --delete  <branch_name>         //error on unmerge

Spiega: OK, spiega solo cosa sta succedendo qui!

Semplicemente fai git Push Origin --delete su elimina SOLO il tuo ramo remoto , aggiungi il nome del ramo alla fine e questo verrà eliminato e Spingilo su remoto allo stesso tempo ...

Inoltre, git branch -D, che semplicemente elimina il ramo localeSOLO! ...

-D sta per --delete --force che cancellerà il ramo anche se non è unito (force delete), ma puoi anche usare -d che sta per --delete che genera un errore rispettivo dello stato di fusione dei branch ...

Creo anche l'immagine qui sotto per mostrare i passaggi:

 delete a remote and local branch in git

1234
Alireza

È inoltre possibile utilizzare quanto segue per eliminare il ramo remoto

git Push --delete Origin serverfix

Che fa la stessa cosa di

git Push Origin :serverfix

ma potrebbe essere più facile da ricordare.

746
pagetribe

Se si desidera eliminare un ramo, prima effettuare il checkout al ramo diverso dal ramo da eliminare.

git checkout other_than_branch_to_be_deleted

Eliminazione del ramo locale:

git branch -D branch_to_be_deleted

Eliminazione del ramo remoto:

git Push Origin --delete branch_to_be_deleted
357

Suggerimento: quando si eliminano i rami utilizzando

git branch -d <branchname> # deletes local branch

o

git Push Origin :<branchname> # deletes remote branch

solo i riferimenti sono cancellati. Anche se il ramo viene effettivamente rimosso sul telecomando, i riferimenti ad esso sono ancora presenti nei repository locali dei membri del team. Ciò significa che per gli altri membri del team i rami eliminati sono ancora visibili quando eseguono un git branch -a.

Per risolvere questo problema, i membri del tuo team possono Potare i rami cancellati con

git remote Prune <repository>

Questo è tipicamente git remote Prune Origin.

352
pfrenssen
git branch -D <name-of-branch>
git branch -D -r Origin/<name-of-branch>
git Push Origin :<name-of-branch>
256
Felipe

Questo è semplice: basta eseguire il seguente comando:

Per eliminare un ramo Git sia localmente che remotamente, prima cancella il ramo locale usando il comando:

git branch -d example

(qui example è il nome del ramo)

E dopo quello cancella il ramo remoto usando il comando:

git Push Origin :example
220
Syeful Islam

Un altro approccio è: -

git Push --Prune Origin

ATTENZIONE: Questo cancellerà tutti i rami remoti che non esistono localmente. O più esaurientemente,

git Push --mirror

renderà efficacemente il repository remoto simile alla copia locale del repository (le testine locali, i telecomandi e i tag sono speculari sul telecomando).

191
imanuelcostigan

Io uso quanto segue nelle impostazioni Bash :

alias git-shoot="git Push Origin --delete"

Quindi puoi chiamare:

git-shoot branchname
160
crizCraig

Da gennaio 2013, GitHub ha incluso a Delete branch pulsante accanto a ciascun ramo nella pagina "Rami".

Post di blog pertinenti: Crea ed elimina rami

128
Nacho Coloma

Se vuoi completare entrambi i passaggi con un singolo comando, puoi creare un alias per questo aggiungendo il seguente ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git Push Origin --delete ${1}; };f"

In alternativa, puoi aggiungerlo alla tua configurazione globale dalla riga di comando usando

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git Push Origin --delete ${1}; };f'

NOTE: Se si utilizza -d (lettera d in minuscolo), il ramo verrà eliminato solo se è stato unito. Per forzare l'eliminazione, è necessario utilizzare -D (maiuscolo D).

119
Ryan Kohn

Elimina localmente:

Per eliminare un ramo locale, puoi usare:

git branch -d <branch_name> 

Per eliminare un ramo forzatamente, usa -D anziché -d.

git branch -D <branch_name>

Elimina in remoto:

Ci sono due opzioni:

git Push Origin :branchname  

git Push Origin --delete branchname 

Ti suggerirei di utilizzare il 2o modo in quanto è più intuitivo.

118
Rahul Gupta

Per eliminare il tuo ramo localmente e in remoto

  • Checkout al ramo principale - git checkout master

  • Elimina la tua filiale remota - git Push Origin --delete <branch-name>

  • Elimina la tua filiale locale - git branch --delete <branch-name>

111
mfathy00

Puoi farlo anche usando git remote Prune Origin

$ git remote Prune Origin
Pruning Origin
URL: [email protected]/yourrepo.git
 * [pruned] Origin/some-branchs

Elimina ed elimina i rami di localizzazione remota da un elenco git branch -r.

106
nickleefly

Oltre alle altre risposte, utilizzo spesso lo strumento git_remote_branch . È un'installazione extra, ma ti offre un modo conveniente per interagire con le filiali remote. In questo caso, per eliminare:

grb delete branch

Trovo che io usi anche i comandi publish e track abbastanza spesso

102
u2622

Un liner comando delete sia locale che remoto :

D=branch-name; git branch -D $D; git Push Origin :$D

oppure aggiungi l'alias qui sotto al tuo ~/.gitconfig ; utilizzo: git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git Push Origin --delete \"$1\"; };f"
92
Vinnie James

Eliminazione di rami

Supponiamo che il nostro lavoro sul ramo "contact-form" sia fatto e lo abbiamo già integrato in "master". Dal momento che non ne abbiamo più bisogno, possiamo cancellarlo (localmente):

$ git branch -d contact-form

E per eliminare il ramo remoto:

git Push Origin --delete contact-form
90
Ulysses Alves

Elimina il ramo remoto

git Push Origin :<branchname>

Elimina il ramo locale

git branch -D <branchname>

Elimina passaggi filiale locale:

  1. checkout ad un altro ramo
  2. elimina il ramo locale
86
jayxhj

Dì semplicemente:

git branch -d <branch-name>
git Push Origin :<branch-name>
85
piyushmandovra

Ora puoi farlo con GitHub Desktop app.

Dopo aver lanciato l'app

  1. Clicca sul progetto che contiene il ramo
  2. Passa al ramo che desideri eliminare  switching branch
  3. Dal menu "Succursale", seleziona "Annulla pubblicazione ..." per fare in modo che il ramo venga eliminato dai server GitHub.  unpublish branch
  4. Dal menu "Succursale", seleziona, "Elimina" branch_name "...", per fare in modo che il ramo venga cancellato dalla tua macchina locale (ovvero la macchina su cui stai lavorando)  delete local branch
79
Eric
git Push Origin --delete <branch Name>

è più facile da ricordare che

git Push Origin :branchName
78
Smila

Per eliminare localmente - (Normale),

git branch -d my_branch

Se il tuo ramo nel progresso di rifondazione/fusione e ciò non è stato fatto correttamente significa che riceverai un errore Rebase/Merge in progress in tal caso, non sarai in grado di eliminare il tuo ramo.

Quindi o la tua necessità di risolvere il ribasso/fusione altrimenti puoi forzare Elimina usando,

git branch -D my_branch

Per eliminare in remoto:

git Push --delete Origin my_branch

può fare lo stesso usando,

git Push Origin :my_branch   # easy to remember both will do the same.

Rappresentazione grafica,

 enter image description here

73
Silent Spectator

Questo non funzionerà se si ha un tag con lo stesso nome del ramo sul telecomando:

$ git Push Origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to Push some refs to '[email protected]:SomeName/some-repo.git'

In tal caso è necessario specificare che si desidera eliminare il ramo, non il tag:

git Push Origin :refs/heads/branch-or-tag-name

Allo stesso modo, per eliminare il tag al posto del ramo si utilizzerà:

git Push Origin :refs/tags/branch-or-tag-name
64
Amiramix

Molte delle altre risposte porteranno a errori/avvertimenti. Questo approccio è relativamente infallibile, anche se potrebbe essere ancora necessario git branch -D branch_to_delete se non è completamente integrato in some_other_branch, ad esempio.

git checkout some_other_branch
git Push Origin :branch_to_delete
git branch -d branch_to_delete

L'eliminazione remota non è necessaria se si elimina il ramo remoto. Viene utilizzato solo per ottenere i telecomandi più aggiornati disponibili su un repository che stai monitorando. Ho osservato che git fetch aggiungerà i telecomandi, non li rimuoverò. Ecco un esempio di quando git remote Prune Origin farà effettivamente qualcosa:

L'utente A esegue i passaggi precedenti. L'utente B eseguirà i seguenti comandi per vedere i rami remoti più aggiornati

git fetch
git remote Prune Origin
git branch -r
50
Brandon Cook

Mi sono stancato di googling per questa risposta, quindi ho adottato un approccio simile a la risposta che crizCraig ha pubblicato in precedenza.

Aggiunto il seguente al mio profilo Bash:

function gitdelete(){
    git Push Origin --delete $1
    git branch -D $1
}

Quindi ogni volta che ho finito con un ramo (fuso in master, ad esempio), eseguo quanto segue nel mio terminale:

gitdelete my-branch-name

... che poi cancella my-branch-name da Origin come pure localmente.

49
arthurakay

Prima dell'esecuzione

git branch --delete <branch>

assicurati di determinare prima quale sia il nome ESATTO del ramo remoto eseguendo:

git ls-remote

Questo ti dirà cosa inserire ESATTAMENTE per il valore <branch>. (branch è case sensitive!)

45
joey
git Push Origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Se sei sicuro di volerlo cancellare, corri

git branch -D bugfix

Ora per ripulire i rami remoti eliminati

git remote Prune Origin
44
Vivek

Mashup di tutte le altre risposte. Richiede Ruby 1.9.3+, testato solo su OS X.

Chiama questo file git-remove, rendilo eseguibile e mettilo nel tuo percorso. Quindi utilizzare, ad esempio, git remove temp.

#!/usr/bin/env Ruby
require 'io/console'

if __FILE__ == $0
      branch_name = ARGV[0] if (ARGV[0])
      print "Press Y to force delete local and remote branch #{branch_name}..."
    response = STDIN.getch
    if ['Y', 'y', 'yes'].include?(response)
      puts "\nContinuing."
      `git branch -D #{branch_name}`
      `git branch -D -r Origin/#{branch_name}`
      `git Push Origin --delete #{branch_name}` 
    else
      puts "\nQuitting."
    end
end
43
Dan Rosenstark

Ho aggiunto i seguenti alias al mio file .gitconfig. Questo mi consente di eliminare i rami con o senza specificare il nome del ramo. Il nome del ramo è impostato di default sul ramo corrente se non viene passato alcun argomento.

[alias]
    branch-name = rev-parse --abbrev-ref HEAD     

    rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git Push Origin :$branch; }; f"
    rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
    rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
39
Jared Knipp

Un'opzione alternativa alla riga di comando per l'eliminazione dei rami remoti è la GitHub branches page .

Vedi ad esempio: https://github.com/angular/angular.js/branches

Trovato nella pagina Code -> Branches di un repository GitHub.

Generalmente preferisco la linea di comando ma questa Pagina GitHub ti mostra molte più informazioni sui rami, come ultima data di aggiornamento e user , e numero di commit avanti e indietro . È utile quando si ha a che fare con un gran numero di rami.

31
Bradley Flood

Ho anche avuto problemi simili, e questo sembra funzionare: questo elimina il ramo locale. git branch -d the_local_branch

Rimuove il ramo remoto git Push Origin :the_remote_branch

Fonte: Makandra Cards

30
Srijan Karki

Ci sono buone risposte, ma, nel caso in cui tu abbia una tonnellata di rami, cancellandoli uno per uno localmente e remotly, sarebbe un compito noioso. È possibile utilizzare questo script per automatizzare queste attività.

branch_not_delete=( "master" "develop" "our-branch-1" "our-branch-2")


for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do

    # delete prefix remotes/Origin/ from branch name
    branch_name="$(awk '{gsub("remotes/Origin/", "");print}' <<< $branch)"

    if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then
        # delete branch remotly and locally
        git Push Origin :$branch_name
    fi
done 
  • Elenca i rami che non vuoi eliminare
  • Esaminare il ramo dei telecomandi e se non sono nella nostra "lista di riserva", abbiamo eliminato.

Fonte: rimozione-git-branches-at-once

28
levi

Usando GitBash puoi eseguire quanto segue:

git branch --delete <branch>

OR

Dall'app desktop GitHub, quando si ha il ramo estratto, è possibile eliminare Local branch tramite la striscia di menu Branch:

 enter image description here

Se tu ARE NON utilizza l'app desktop GitHub e stai usando un IDE come Visual Studio per il tuo controllo sorgente locale, tutto ciò che devi fare è un paio di passaggi veloci:

  1. Controlla una filiale diversa da quella che desideri eliminare.
  2. Fare clic con il pulsante destro del ramo che si desidera eliminare.
  3. Seleziona l'opzione Elimina dal menu di scelta rapida.

Quindi, una volta effettuato l'accesso al tuo account GitHub online, vai al repository e fai clic suTutti i ramitab. Da lì, fai clic sull'icona del cestino sulla destra sul nome del brach che desideri eliminare.

 enter image description here

* Tieni presente che se la filiale non è pubblicata, non è necessario provare a eliminarla dal tuo repository online.

23
Uchiha Itachi

Ho creato la seguente comoda funzione nel mio file .bash_aliases:

git-delete-branch() 
{ 
    if [[ -n $1 ]]; then
        git checkout master > /dev/null;
        branch_name="$1";
        echo "Deleting local $branch_name branch...";
        git branch -D "$branch_name";
        echo "Deleting remote $branch_name branch...";
        git Push Origin --delete "$branch_name";
        git remote Prune Origin;
        echo "Your current branches are:";
        git branch -a;
    else
        echo "Usage: git-delete-branch <branch_name>";
    fi
}
19

Secondo l'ultimo documento che utilizza il terminale possiamo cancellare il seguente modo.

elimina in locale:

git branch -D usermanagement

elimina in postazione remota:

git Push --delete Origin usermanagement
19
KARTHIKEYAN.A

È molto semplice

Per eliminare il ramo remoto

git Push -d Origin <branch-name>

OR

git Push Origin :<branch-name>

Per eliminare il ramo locale

git branch -D <branch-name>
15
Vivek Maru