git - remove - pull request cos è




Come posso eliminare un ramo Git sia localmente che remotamente? (20)

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?


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


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.


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


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

Io uso il seguente nelle mie impostazioni di Bash :

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

Quindi puoi chiamare:

git-shoot branchname

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

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.


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.


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)

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!)


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.


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

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

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 .


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


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.


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,


git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

git push origin --delete branchName

è più facile da ricordare che

git push origin :branchName






git-remote