As respostas curtas
Se você quiser explicações mais detalhadas dos comandos a seguir, consulte as respostas longas na próxima seção.
Excluindo uma ramificação remota
git push origin --delete <branch> # Git version 1.7.0 or newer
git push origin -d <branch> # Shorter version (Git 1.7.0 or newer)
git push origin :<branch> # Git versions older than 1.7.0
Excluindo uma ramificação local
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches
Excluindo uma filial de rastreamento remoto local
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p # Shorter
A resposta longa : existem três ramos diferentes para excluir!
Ao lidar com a exclusão de ramificações local e remotamente, lembre-se de que existem três ramificações diferentes envolvidas :
- A filial local
X
.
- A ramificação de origem remota
X
.
- A filial de rastreamento remoto local
origin/X
que rastreia a filial remota X
.
O pôster original usado:
git branch -rd origin/bugfix
Que só apagados seu local de ramo de rastreamento remoto origin/bugfix
, e não o ramo remoto real bugfix
on origin
.
Para excluir essa ramificação remota real , você precisa
git push origin --delete bugfix
Detalhes adicionais
As seções a seguir descrevem detalhes adicionais a serem considerados ao excluir suas ramificações remotas e de rastreamento remoto.
Pressionar para excluir ramificações remotas também remove ramificações de rastreamento remoto
Observe que excluir a ramificação remota X
da linha de comando usando a git push
também removerá a ramificação local de rastreamento remoto origin/X
, portanto, não é necessário remover a ramificação obsoleta do rastreamento remoto com git fetch --prune
ou git fetch -p
. No entanto, não faria mal se você fizesse isso de qualquer maneira.
Você pode verificar se a ramificação de rastreamento remoto origin/X
também foi excluída executando 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
Eliminando a origem obsoleta da filial de rastreamento remoto local / X
Se você não excluiu sua ramificação remota X
da linha de comando (como acima), seu repositório local ainda conterá uma ramificação de rastreamento remoto (agora obsoleta) origin/X
. Isso pode acontecer se você excluir uma ramificação remota diretamente pela interface da web do GitHub, por exemplo.
Uma maneira típica de remover essas ramificações obsoletas de rastreamento remoto (desde o Git versão 1.6.6) é simplesmente executar git fetch
com o --prune
ou mais curto -p
. Observe que isso remove todas as ramificações locais obsoletas de rastreamento remoto de ramificações remotas que não existem mais no controle remoto :
git fetch origin --prune
git fetch origin -p # Shorter
Aqui está a citação relevante das notas de versão 1.6.6 (ênfase minha):
"git fetch" aprendido --all
e --multiple
opções, para executar a busca em muitos repositórios e --prune
opção para remover ramificações de rastreamento remoto que ficaram obsoletas. Isso torna a "atualização remota git" e a "remoção remota git" menos necessárias (embora não exista nenhum plano para remover a atualização remota nem a remoção remota).
Alternativa à remoção automática acima para ramificações obsoletas de rastreamento remoto
Como alternativa, em vez de remover suas ramificações obsoletas de rastreamento remoto local git fetch -p
, você pode evitar a operação de rede extra apenas removendo manualmente as ramificações com os sinalizadores --remote
ou -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Veja também