remove Come posso eliminare un ramo Git sia localmente che remotamente?




pull request cos è (24)

Voglio eliminare un ramo sia localmente che sul mio fork del progetto remoto su GitHub .

Tentativi non riusciti per 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 devo fare in modo diverso per cancellare correttamente il ramo remotes/origin/bugfix sia localmente che su GitHub?


Sintesi

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

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

Elimina il ramo locale

Per eliminare il ramo locale 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 integrato nel relativo ramo upstream. Puoi anche usare -D , che è un alias per --delete --force , che cancella il ramo "indipendentemente dal suo stato unito". [La fonte: man git-branch ]

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

A partire da Git v1.7.0 , è possibile eliminare un ramo remoto 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 - ad esempio, tu e i tuoi collaboratori avete finito con una funzione e l'avete fusa nel ramo principale del telecomando (o in qualsiasi ramo in cui si trova la vostra linea di demarcazione stabile). Puoi cancellare un ramo remoto usando la sintassi piuttosto ottusa git push [remotename] :[branch] . Se si desidera eliminare il ramo serverfix dal server, si esegue quanto segue:

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Nessun altro ramo 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 git push [remotename] [localbranch]:[remotebranch] che è andata un po 'prima. Se lasci la porzione [localbranch] , in sostanza stai dicendo: "Non prendere niente dalla mia parte e renderlo [remotebranch] ".

Ho emesso l' git push origin :bugfix e ha funzionato magnificamente. Scott Chacon aveva ragione: vorrò dare orecchio a quella pagina (o virtualmente all'orecchio del cane rispondendo a questo in ).

Quindi dovresti eseguirlo su altre macchine

git fetch --all --prune

per propagare le modifiche.


Questo non funzionerà se hai 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

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 di filiali sia a livello locale che remoto, tieni presente che ci sono 3 diversi rami coinvolti :

  1. La filiale locale X
  2. Il ramo di origine remoto X
  3. L' origin/X ramo di localizzazione remota locale origin/X che tiene traccia del ramo remoto X

Il poster originale usato

git branch -rd origin/bugfix

che ha eliminato solo la sua origin/bugfix ramo di localizzazione remota locale e non il bugfix ramo remoto effettivo origin .

Per eliminare quel ramo remoto effettivo , è necessario

git push origin --delete bugfix

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 comando git push eliminerà anche l' origin/X ramo di localizzazione remota locale , quindi non è necessario git fetch --prune il ramo obsoleto di tracciamento remoto con git fetch --prune o git fetch -p , anche se non sarebbe male se lo facessi comunque.

È possibile verificare che l' origin/X ramo di tracciamento remoto sia stata eliminata anche 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 dell'origine del ramo di tracciamento remoto locale obsoleto / X

Se non hai cancellato il tuo ramo remoto X dalla riga di comando (come sopra), allora il repository locale conterrà ancora (una ormai obsoleta) origin/X ramo di localizzazione remota. Questo può accadere se si elimina una diramazione remota 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 shorter -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 dalle note di rilascio 1.6.6 (sottolineatura mia):

"git fetch" ha imparato - tutte e --multiple opzioni, per eseguire il recupero da molti repository, e --prune opzione --prune per rimuovere i rami di tracciamento remoto --prune . Questi elementi rendono "necessario aggiornare git" e "git remote prune" meno necessari (non esiste un piano per rimuovere "aggiornamento remoto" e "eliminazione remota", 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 , è possibile evitare di eseguire l'operazione di rete aggiuntiva semplicemente rimuovendo manualmente i branch con i --remote o -r :

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

Guarda anche


Passi per l'eliminazione di un ramo:

per eliminare il ramo remoto:

git push origin --delete <your_branch> 

per eliminare il ramo locale , hai tre modi:

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!

Basta fare git push origin --delete per eliminare SOLO il tuo ramo remoto , aggiungi il nome del ramo alla fine e questo lo cancellerà e lo spingerà al remoto allo stesso tempo ...

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

-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 lancia un errore rispettivo dello stato di fusione dei branch ...

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


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 tracciamento remoto da un git branch -r elenco.


Prima di eseguire

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> . (il branch è sensibile al maiuscolo / minuscolo!)


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 il tuo bisogno 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,


Ora puoi farlo con l'app GitHub Desktop .

Dopo aver lanciato l'app

  1. Clicca sul progetto che contiene il ramo
  2. Passare al ramo che si desidera eliminare
  3. Dal menu "Ramo", seleziona "Annulla pubblicazione ..." per fare in modo che il ramo venga eliminato dai server GitHub.
  4. Dal menu "Branch", seleziona, "Elimina" branch_name "...", per fare in modo che il ramo venga cancellato dalla tua macchina locale (ovvero la macchina su cui stai lavorando)

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

Per rimuovere un ramo locale dalla tua macchina:

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

Per rimuovere un ramo remoto dal server:

git push origin --delete {the_remote_branch}

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


Un altro approccio è

git push --prune origin

ATTENZIONE: questo eliminerà 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 su remoto).


Io uso il seguente nelle mie impostazioni di Bash :

alias git-shoot="git push origin --delete"

Quindi puoi chiamare:

git-shoot branchname

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

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 cancellati sono ancora visibili quando fanno un git branch -a .

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

git remote prune <repository>

Questo è in genere git remote prune origin .


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 corrono

git remote prune origin

A partire da gennaio 2013, GitHub ha incluso un pulsante Elimina ramo accanto a ciascun ramo nella pagina "Rami".

Post del blog pertinente: crea ed elimina i rami


Elimina localmente:

Per eliminare un ramo locale, puoi usare:

git branch -d branch_name 

Per eliminare un ramo forzatamente, usa -D invece di -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.


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

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 uso anche i comandi di publish e di track abbastanza spesso.


Mi sono stancato di googling per questa risposta, quindi ho adottato un approccio simile alla 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 il my-branch-name origin come pure localmente.


Un comando di linea elimina 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"

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 della filiale locale:

git branch -D branch_to_be_deleted

Eliminazione del ramo remoto:

git push origin --delete branch_to_be_deleted

Molte altre risposte porteranno a errori / avvertimenti. Questo approccio è relativamente infallibile, sebbene tu possa ancora aver bisogno di 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. È usato solo per ottenere i telecomandi più aggiornati disponibili su un repo che stai monitorando. Ho osservato che git fetch aggiungerà i telecomandi, non li rimuoverà. Ecco un esempio di quando git remote prune origin effettivamente farà 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

È 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.


Per eliminare il tuo ramo localmente e da remoto

  • Fai il checkout al master branch - git checkout master

  • Elimina il tuo ramo remoto - git push origin --delete <branch-name>

  • Elimina il tuo ramo locale - git branch --delete <branch-name>





git-remote