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 :
- La filiale locale
X
- Il ramo di origine remoto
X
- L'
origin/X
ramo di localizzazione remota localeorigin/X
che tiene traccia del ramo remotoX
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:
- checkout ad un altro ramo
- 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
- Clicca sul progetto che contiene il ramo
- Passare al ramo che si desidera eliminare
- Dal menu "Ramo", seleziona "Annulla pubblicazione ..." per fare in modo che il ramo venga eliminato dai server GitHub.
- 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