Quando você usa git push origin :staleStuff, ele remove automaticamente origin/staleStuff, portanto, quando você executou git remote prune origin, removeu algum ramo que foi removido por outra pessoa. É mais provável que seus colegas de trabalho agora precisem correr git prunepara se livrar dos ramos que você removeu.
Então o que exatamente git remote prunefaz? Idéia principal: branches locais (não rastreando branches) não são tocados por git remote prunecomando e devem ser removidos manualmente.
Agora, um exemplo do mundo real para melhor compreensão:
Você tem um repositório remoto com 2 ramos: mastere feature. Vamos supor que você esteja trabalhando em ambos os branches, então, como resultado, você tem essas referências em seu repositório local (nomes de referência completos são fornecidos para evitar qualquer confusão):
refs/heads/master(nome curto master)
refs/heads/feature(nome curto feature)
refs/remotes/origin/master(nome curto origin/master)
refs/remotes/origin/feature(nome curto origin/feature)
Agora, um cenário típico:
- Algum outro desenvolvedor termina todo o trabalho no
feature, funde-o mastere remove o featurebranch do repositório remoto.
- Por padrão, quando você faz
git fetch(ou git pull), nenhuma referência é removida de seu repositório local, então você ainda tem todas essas 4 referências.
- Você decide limpá-los e fugir
git remote prune origin.
- git detecta que o
featurebranch não existe mais, então refs/remotes/origin/featureé um branch obsoleto que deve ser removido.
- Agora você tem 3 referências, incluindo
refs/heads/feature, porque git remote prunenão remove nenhuma refs/heads/*referência.
É possível identificar filiais locais, associadas a filiais de rastreamento remoto, por branch.<branch_name>.mergeparâmetro de configuração. Este parâmetro não é realmente necessário para que nada funcione (provavelmente exceto git pull), então pode estar faltando.
(atualizado com exemplos e informações úteis de comentários)
git remote show origine procurar por qualquer branches marcadostale