Como é que apago uma ramificação Git tanto localmente como remotamente?

quero apagar um ramo tanto localmente como no meu fork remoto do projecto no GitHub .

tentativas falhadas de apagar ramificação remota

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

O que preciso fazer de diferente para apagar com sucesso o remotes/origin/bugfix tanto localmente como no GitHub?

Author: Vadim Kotov, 2010-01-05

30 answers

Resumo Executivo

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

Note que na maioria dos casos o nome remoto é origin.

Apagar A Ramificação Local

Para apagar o ramolocal use um dos seguintes:

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

Nota: a opção -d é um nome alternativo para --delete, que só apaga o ramo se já tiver sido totalmente fundido no seu ramo a montante. Você também poderia usar -D, que é um pseudônimo para --delete --force, que apaga o ramo " independentemente de seu status fundido." [Fonte: man git-branch]

Apagar ramo remoto [actualizado em 8-Sep-2017]

A partir de Git v1.7.0, pode apagar um remoto ramo que utiliza

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

Que pode ser mais fácil de lembrar do que

$ git push <remote_name> :<branch_name>

Que foi adicionado em Git v1.5.0 "para apagar um ramo remoto ou uma marca."

A partir de Git v2. 8. 0 também pode usar git push com a opção -d como nome alternativo para --delete.

Portanto, a versão do Git você instalou irá ditar se você precisa usar a sintaxe mais fácil ou mais difícil.

Apagar ramo remoto [resposta Original de 5-Jan-2010]

Do Capítulo 3 do Pro Git por Scott Chacon:

Apagar Ramos Remotos

Suponha que você acabou com um ramo remoto-digamos, você e seus colaboradores estão acabados com um recurso e o fundiram no ramo mestre do seu remoto (ou seja qual for o ramo que seu codeline estável é em). Poderá remover um ramo remoto usando a sintaxe obtuse git push [remotename] :[branch]. Se quiser apagar a sua ramificação serverfix do servidor, execute o seguinte:
$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix
Boom. Não há mais ramificações no seu servidor. Você pode querer ouvir esta página, porque você vai precisar desse comando, e você provavelmente vai esquecer a sintaxe. Uma maneira de lembrar este comando é lembrando a sintaxe git push [remotename] [localbranch]:[remotebranch] que passamos um pouco mais cedo. Se você deixar de fora a parte [localbranch], Então você está basicamente dizendo, " Tome nada do meu lado e faz com que seja."

Eu emiti git push origin :bugfix e funcionou lindamente. Scott Chacon estava certo - eu vou querer ouvir essa página (ou virtualmente a orelha do cão respondendo a isso no Stack Overflow).

Então você deve executar isso em outras máquinas

git fetch --all --prune

Para propagar alterações.

 17578
Author: Matthew Rankin, 2018-07-06 19:08:34

A resposta de Mateus é óptima para removerramificações remotas e também aprecio a explicação, mas para fazer uma simples distinção entre os dois comandos:

Para remover um sucursal local da sua máquina:

git branch -d {the_local_branch} (usar -D em vez disso, para forçar a remoção do ramo sem verificar o estado reunido)

Para remover um ramo remoto do servidor:

git push origin --delete {the_remote_branch}

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

 2907
Author: Eric Brotto, 2017-12-18 12:33:13

As Respostas Curtas

Se quiser explicações mais detalhadas dos seguintes comandos, veja as respostas longas na secção seguinte.

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

Apagar um ramo local:

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

Apagar um ramo local de localização remota:

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

A resposta longa: há 3 ramos diferentes para apagar!

Quando se trata de apagar ramos tanto localmente como remotamente, tenha em mente que existem 3 diferentes ramos envolvidos:
  1. o ramo local X.
  2. o ramo de origem remota X.
  3. o ramo local de localização remota origin/X que localiza o ramo remoto X.

Visualization of 3 branches

O cartaz original usado

git branch -rd origin/bugfix
Que só apagou a sua ramificação local de localização remota. origin/bugfix, e não o ramo remoto em bugfix.

Diagram 2

Para apagar esse remoto actual branch , precisas

git push origin --delete bugfix

Diagram 3

Detalhes Adicionais

As secções seguintes descrevem detalhes adicionais a considerar ao apagar os seus ramos de localização remota e remota.

Se empurrar para remover os ramos remotos também apaga os ramos remotos

Lembre-se que a remoção do ramo remoto X da linha de comandos com um git push irá também apagar o ramo local de localização remota origin/X, por isso, não é necessário podar o ramo obsoleto de localização remota com git fetch --prune ou git fetch -p, embora não fizesse mal se o fizesses de qualquer maneira.

Pode verificar se o ramo de localização remota origin/X também foi apagado ao executar o seguinte:

# 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

Podar a obsoleta origem local do ramo de localização remota / X

Se não apagou o seu ramo remoto {[[8]} da linha de comandos( como em cima), então o seu repo local irá ainda conter (um agora obsoleto) ramo de localização remota origin/X. Isto pode acontecer se você removeu um ramo remoto diretamente através da interface web do GitHub, por exemplo.

Uma maneira típica de remover estes ramos obsoletos de rastreamento remoto (desde a versão 1.6.6 do Git) é simplesmente executar git fetch com o --prune ou mais curto -p. Note que isto remove todos os ramos de localização remota obsoletos para quaisquer ramos remotos que já não existam no remoto:

git fetch origin --prune
git fetch origin -p # Shorter

Aqui está a citação relevante das notas de lançamento 1.6.6 (ênfase mine):

"git fetch" aprendido --all e as opções --multiple, para correr buscar de muitos repositórios, e --prune opção para remover o seguimento remoto ramos que se tornaram obsoletos.{[47] } estes fazem "git remote update" e " git podar remoto " menos necessário (não existe nenhum plano para remover "remoto update " nor "remote prune", though).

Alternativa à poda acima automática para ramos obsoletos de localização remota

Em alternativa, em vez de podar os seus obsoletos ramos locais de localização remota através git fetch -p, você pode evitar fazer a operação de rede extra apenas removendo manualmente o(s) ramo (s) com as opções --remote ou -r:

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

Ver Também

 1665
Author: Valentin Lorentz, 2016-03-10 12:20:26

Passos para apagar um ramo:

Para Apagar o ramo remoto :

git push origin --delete <your_branch> 

Para Apagar a ramificação local, Você tem três maneiras:

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

Explica-me o que se passa aqui.

Basta fazer git push origin --delete para apagar apenas o seu ramo remoto {[[13]}, adicionar o nome do ramo no fim e isto irá apagar e empurrá-lo para o remoto ao mesmo tempo...

Também, git branch -D, que simplesmente apaga o local branch apenas!...

-D significa --delete --force que irão eliminar o ramo ainda não mesclada(força excluir), mas você também pode usar -d que significa --delete que lançar um erro respectivos do ramo de estado de impressão em série...

Também crio a imagem abaixo para mostrar os passos:

delete a remote and local branch in git

 946
Author: Alireza, 2018-06-18 10:02:24

Você também pode usar o seguinte para remover o ramo remoto.

git push --delete origin serverfix
O que faz a mesma coisa que
git push origin :serverfix
Mas pode ser mais fácil de lembrar.
 709
Author: pagetribe, 2015-01-29 18:57:03

Se quiser apagar um ramo, faça a primeira saída para o ramo que não o ramo a ser apagado.

git checkout other_than_branch_to_be_deleted

Apagar a ramificação local:

git branch -D branch_to_be_deleted

Apagar o ramo remoto:

git push origin --delete branch_to_be_deleted
 346
Author: Praveen Hiremath, 2015-06-09 02:04:02

Dica: quando apagar ramos usando

git branch -d <branchname>    # deletes local branch

Ou

git push origin :<branchname> # deletes remote branch

Apenas as referências são suprimidas. Mesmo que o ramo seja realmente removido no Remoto, as referências a ele ainda existe nos repositórios locais de seus membros da equipe. Isto significa que para outros membros da equipe os ramos excluídos ainda são visíveis quando eles fazem um git branch -a.

Para resolver isto, os membros da equipa podem podar os ramos apagados com
git remote prune <repository>

Isto é tipicamente git remote prune origin.

 333
Author: pfrenssen, 2015-01-29 18:58:06
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
 248
Author: Felipe, 2014-08-08 20:04:03

Isto é simples: basta executar o seguinte comando:

Para remover um ramo git tanto localmente como remotamente, primeiro remova o ramo local com o comando:

git branch -d example

(aqui example é o nome do ramo)

E depois disso apagar ramo remoto usando o comando:

git push origin :example
 213
Author: Syeful Islam, 2015-06-09 02:03:14

Outra abordagem é

git push --prune origin

aviso: Isto irá apagar todos os ramos remotos que não existem localmente. ou de forma mais abrangente,

git push --mirror

Irá efectivamente fazer com que o repositório remoto se pareça com a cópia local do repositório (as cabeças, comandos e marcas locais são espelhados no remoto).

 179
Author: imanuelcostigan, 2015-01-10 01:11:11

USO o seguinte na minha configuração Bash :

alias git-shoot="git push origin --delete"
Depois podes ligar para:
git-shoot branchname
 150
Author: crizCraig, 2014-11-29 06:27:02

Desde janeiro de 2013, o GitHub incluiu um botão apagar ramo ao lado de cada ramo na sua página de "Ramos".

Post relevante no blog: criar e apagar ramificações

 117
Author: Nacho Coloma, 2014-05-27 02:43:06

Se quiser completar ambos os passos com um único comando, pode fazer um nome falso para ele, adicionando o abaixo ao seu ~/.gitconfig:

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

Em alternativa, poderá adicionar isto à sua configuração global a partir da linha de comandos usando

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

Nota : Se utilizar -d (minúsculas d), o ramo só será apagado se tiver sido fundido. Para forçar a remoção a acontecer, terá de usar -D (maiúsculas D).

 110
Author: Ryan Kohn, 2014-06-11 16:26:17

Para apagar a sua ramificação local e remotamente

  • Obter para ramo mestre- git checkout master

  • Apagar o seu ramo remoto- git push origin --delete <branch-name>

  • Apagar a sua ramificação local- git branch --delete <branch-name>

 104
Author: mfathy00, 2017-12-13 22:10:51

Apagar localmente:

Para apagar um ramo local, pode usar:

git branch -d branch_name 

Para apagar um ramo à força, use -D em vez de -d.

git branch -D branch_name

Apagar remotamente:

Há duas opções:

git push origin :branchname  

git push origin --delete branchname 
Sugiro que use o segundo caminho, porque é mais intuitivo.
 101
Author: Rahul Gupta, 2015-06-07 10:36:53

Também pode fazer isto usando git remote prune origin:

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

Extrai e apaga ramos de localização remota de uma lista git branch -r.

 95
Author: nickleefly, 2014-11-29 06:26:26

Para além das outras respostas, uso frequentemente a ferramenta git_remote_branch. É uma instalação extra, mas dá-lhe uma maneira conveniente de interagir com os ramos remotos. Neste caso, apagar:

grb delete branch

Acho que também uso os comandos publish e track com bastante frequência.

 93
Author: u2622, 2013-08-03 12:33:06

Apagar Ramos

Vamos assumir que o nosso trabalho em "contact-form" do ramo está feito e já o integrámos em "master". Uma vez que já não precisamos dele, podemos apagá-lo (localmente):
$ git branch -d contact-form

E por apagar o ramo remoto:

git push origin --delete contact-form
 84
Author: Ulysses Alves, 2015-11-18 19:51:13

Um liner comando apagar tanto local como Remoto:

D=branch-name; git branch -D $D; git push origin :$D

Ou adicionar a alcunha abaixo ao seu ~/.gitconfig; Utilização: git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"
 83
Author: Vinnie James, 2017-01-15 08:30:43

Apagar ramo remoto

git push origin :<branchname>

Apagar a ramificação local

git branch -D <branchname>

Apagar os passos da ramificação local:

  1. check-out para outro ramo
  2. apagar a ramificação local
 81
Author: jayxhj, 2016-02-19 18:05:46

Basta dizer:

git branch -d <branch-name>
git push origin :<branch-name>
 78
Author: piyushmandovra, 2016-06-25 12:52:01

Agora pode fazê-lo com a aplicação GitHub Desktop.

Após o lançamento da aplicação

  1. carregue no projecto que contém a ramificação
  2. mude para o ramo que deseja apagar switching branch
  3. do menu" Branch", seleccione, " Unpublish...", para ter o branch excluído dos servidores GitHub. unpublish branch
  4. do menu" Branch", seleccione, 'Delete" branch_name "...', para ter o ramo apagado do seu local máquina (também conhecida como a máquina em que está actualmente a trabalhar) delete local branch
 75
Author: Eric, 2016-12-16 03:58:50

Para apagar localmente- (Normal),

git branch -d my_branch

Se o seu ramo em rebocar / fundir o progresso e isso não foi feito correctamente significa, você vai ter um erro {[[4]} Então, nesse caso, você não será capaz de apagar o seu ramo.

Por isso, ou a sua necessidade de resolver o ajuste/fusão, caso contrário, poderá forçar a remoção usando,

git branch -D my_branch

Para Apagar no Remoto:

git push --delete origin my_branch

Pode fazer o mesmo usando ,

git push origin :my_branch   # easy to remember both will do the same.

Gráfico Representação,

enter image description here

 71
Author: Mohideen ibn Mohammed, 2017-11-19 10:24:03
git push origin --delete branchName

É mais fácil de lembrar do que

git push origin :branchName
 66
Author: Smila, 2015-05-19 10:05:26

Isto não vai funcionar se você tiver uma etiqueta com o mesmo nome que o ramo no remoto:

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

Nesse caso, precisa de especificar que deseja apagar o ramo, não a marca:

git push origin :refs/heads/branch-or-tag-name

Da mesma forma, para apagar a marca em vez do ramo que usaria:

git push origin :refs/tags/branch-or-tag-name
 59
Author: Amiramix, 2014-10-20 11:30:52
Fartei-me de pesquisar esta resposta no Google, por isso, adoptei uma abordagem semelhante. à resposta que o crizCraig postou há pouco.

Adicionei o seguinte ao meu perfil Bash:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Então toda vez que eu terminar com um ramo (mesclado em master, por exemplo) Eu corro o seguinte no meu terminal:

gitdelete my-branch-name

...que então apaga my-branch-name de origin assim como localmente.

 47
Author: arthurakay, 2017-05-23 12:34:58

Muitas das outras respostas levarão a erros / avisos. Esta abordagem é uma prova relativamente tola, embora você ainda possa precisar de git branch -D branch_to_delete Se não for totalmente fundido em some_other_branch, por exemplo.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

A poda remota não é necessária se apagares o ramo remoto. Só é usado para obter os comandos mais atualizados disponíveis num repo que você está rastreando. Observei que git fetch irá adicionar comandos, não removê-los. Aqui está um exemplo de quando git remote prune origin vai realmente fazer algo:

O Utilizador a faz os degraus acima. O utilizador B iria executar os seguintes comandos para ver os ramos remotos mais actualizados

git fetch
git remote prune origin
git branch -r
 46
Author: Brandon Cook, 2013-11-27 03:04:55
git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Se TEM a certeza que o quer apagar, execute

git branch -D bugfix

Agora para limpar os ramos remotos apagados executar

git remote prune origin
 42
Author: Vivek, 2016-04-21 16:49:36

Antes de executar

git branch --delete <branch>

Certifique-se que determina primeiro Qual é o nome exacto do ramo remoto executando:

git ls-remote

Isto dir-lhe-á o que introduzir exactamente pelo valor <branch>. É sensível a maiúsculas!)

 42
Author: joey, 2016-06-25 12:56:09

Mashup de todas as outras respostas. Necessita de Ruby 1.9.3+, testada apenas em OS X.

Ligue para este ficheiro git-remove, torne-o executável e coloque-o no seu caminho. Então use, por exemplo, 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
 40
Author: Dan Rosenstark, 2014-05-30 18:34:01