Prune Remote Git - não mostrou tantas ramos podadas quanto eu esperava
-
27-09-2019 - |
Pergunta
Da página do homem:
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 galhos usando
git push origin :staleStuff
e depois correu
git remote prune origin
No entanto, apenas uma única filial local foi podada. Alguns desses ramos foram criados por mim, outros por colegas de trabalho. Isso indica que eu não estava rastreando esses ramos corretamente em primeiro lugar?
Solução
Quando você usa git push origin :staleStuff
, ele remove automaticamente origin/staleStuff
, então quando você correu git remote prune origin
, você podou algum ramo que foi removido por outra pessoa. É mais provável que seus colegas de trabalho agora precisem correr git prune
Para se livrar dos galhos, você removeu.
Então, o que exatamente git remote prune
faz? Idéia principal: ramos locais (não rastreando ramos) não são tocados por git remote prune
comando e deve ser removido manualmente.
Agora, um exemplo do mundo real para uma melhor compreensão:
Você tem um repositório remoto com 2 ramos: master
e feature
. Vamos supor que você esteja trabalhando em ambas as filiais; portanto, como resultado, você tem essas referências no repositório local (nomes completos de referência são dados 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:
- Algum outro desenvolvedor termina, todos funcionam no
feature
, mesclamaster
e removefeature
ramo do repositório remoto. - Por padrão, quando você faz
git fetch
(ougit pull
), nenhuma referência é removida do seu repositório local, para que você ainda tenha todas essas 4 referências. - Você decide limpá -los e correr
git remote prune origin
. - Git Detecte isso
feature
ramo não existe mais, entãorefs/remotes/origin/feature
é um Stale ramo que deve ser removido. - Agora você tem 3 referências, incluindo
refs/heads/feature
, Porquegit remote prune
não remove nenhumrefs/heads/*
referências.
É possível identificar ramos locais, associados a ramos 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 exceto git pull
), então pode estar faltando.
(Atualizado com exemplo e informações úteis dos comentários)