Voglio cancellare un ramo sia localmente che in 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 diversamente per cancellare con successo il ramo
remotes/origin/bugfix
sia localmente che da remoto?
$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>
Si noti che nella maggior parte dei casi il nome remoto è origin
.
Per cancellare il ramo locale usa uno dei seguenti metodi:
$ git branch -d branch_name
$ git branch -D branch_name
Nota: L'opzione -d
è un alias per --delete
, che cancella il ramo solo se è già stato completamente unito nel suo ramo a monte. Si potrebbe anche usare -D
, che è un alias per --delete --force
, che cancella il ramo "indipendentemente dal suo stato di fusione." [Fonte: man git-branch
]
A partire da Git v1.7.0, puoi cancellare un ramo remote usando
$ git push <remote_name> --delete <branch_name>
che potrebbe essere più facile da ricordare rispetto a
$ git push <remote_name> :<branch_name>
che è stato aggiunto in Git v1.5.0 "per cancellare un ramo remoto o un tag."
A partire da [Git v2.8.0][git-2.8.0] puoi anche usare git push
con l'opzione -d
come alias per --delete
.
Quindi, la versione di Git che hai installato detterà se hai bisogno di usare la sintassi più facile o più difficile.
Dal capitolo 3 di Pro Git di Scott Chacon:
Supponiamo che tu abbia finito con un ramo remoto - diciamo che tu e i tuoi collaboratori avete finito con una caratteristica e l'avete fusa nel ramo master del tuo remoto (o qualsiasi ramo in cui si trovi la tua linea di codice stabile). Puoi cancellare un ramo remoto usando la sintassi piuttosto ottusa
git push [remotename] :[branch]
. Se vuoi cancellare il tuo ramo server-fix dal server, esegui quanto segue: {\an8}(N.d.T.: "git push") $ git push origin :serverfix Per [email protected]:schacon/simplegit.git
- cancellato] serverfix
Boom. Niente più rami sul vostro server. Potresti voler fare l'orecchio da cane a questa pagina, perché avrai bisogno di questo comando, e probabilmente dimenticherai la sintassi. Un modo per ricordare questo comando è ricordare la sintassi di git push [remotename] [localbranch]:[remotebranch]
che abbiamo visto un po' prima. Se lasciate fuori la porzione [localbranch]
, allora state fondamentalmente dicendo: "Non prendete niente dalla mia parte e fatelo diventare [remotebranch]
.
Ho emesso git push origin: bugfix
e ha funzionato meravigliosamente. Scott Chacon aveva ragione-voglio orecchio di cane quella pagina (o virtualmente orecchio di cane rispondendo a questo su Stack Overflow).
[git-2.8.0]: https://github.com/git/git/blob/master/Documentation/RelNotes/2.8.0.txt
Poi dovresti eseguire questo su altre macchine
# Fetch changes from all remotes and locally delete
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune
per propagare le modifiche.
Puoi anche usare il seguente per cancellare il ramo remoto
git push --delete origin serverfix
Che fa la stessa cosa di
git push origin :serverfix
ma può essere più facile da ricordare.
Oltre alle altre risposte, uso spesso lo strumento git_remote_branch. È un'installazione extra, ma ti dà un modo conveniente per interagire con i rami remoti. In questo caso, per cancellare:
grb delete branch
Ho scoperto che uso anche i comandi publish
e track
abbastanza spesso