Na página de manual:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
Então eu removi um monte de ramos usando
git push origin :staleStuff
e então correu
git remote prune origin
No entanto, apenas um único ramo local foi podado. Alguns desses ramos foram criados por mim, alguns por colegas de trabalho. Isso indica que eu não estava rastreando essas ramificações corretamente em primeiro lugar?
git
version-control
branch
git-branch
git-remote
Felixyz
fonte
fonte
git remote show origin
e procurar por qualquer branches marcadostale
Respostas:
Quando você usa
git push origin :staleStuff
, ele remove automaticamenteorigin/staleStuff
, portanto, quando você executougit remote prune origin
, removeu algum ramo que foi removido por outra pessoa. É mais provável que seus colegas de trabalho agora precisem corrergit prune
para se livrar dos ramos que você removeu.Então o que exatamente
git remote prune
faz? Idéia principal: branches locais (não rastreando branches) não são tocados porgit remote prune
comando e devem ser removidos manualmente.Agora, um exemplo do mundo real para melhor compreensão:
Você tem um repositório remoto com 2 ramos:
master
efeature
. 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 curtomaster
)refs/heads/feature
(nome curtofeature
)refs/remotes/origin/master
(nome curtoorigin/master
)refs/remotes/origin/feature
(nome curtoorigin/feature
)Agora, um cenário típico:
feature
, funde-omaster
e remove ofeature
branch do repositório remoto.git fetch
(ougit pull
), nenhuma referência é removida de seu repositório local, então você ainda tem todas essas 4 referências.git remote prune origin
.feature
branch não existe mais, entãorefs/remotes/origin/feature
é um branch obsoleto que deve ser removido.refs/heads/feature
, porquegit remote prune
não remove nenhumarefs/heads/*
referência.É possível identificar filiais locais, associadas a filiais de rastreamento remoto, por
branch.<branch_name>.merge
parâmetro de configuração. Este parâmetro não é realmente necessário para que nada funcione (provavelmente excetogit pull
), então pode estar faltando.(atualizado com exemplos e informações úteis de comentários)
fonte
git prune
. Apenas ramos em/refs/remotes/<remote_name>/
estão sujeitos a poda; quaisquer ramos/refs/heads/
não serão tocados - você deve gerenciá-los manualmente.branch.<branch_name>.merge
parâmetro de configuração.