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?

Foi útil?

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 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:

  1. Algum outro desenvolvedor termina, todos funcionam no feature, mescla master e remove feature ramo do repositório remoto.
  2. Por padrão, quando você faz git fetch (ou git pull), nenhuma referência é removida do seu repositório local, para que você ainda tenha todas essas 4 referências.
  3. Você decide limpá -los e correr git remote prune origin.
  4. Git Detecte isso feature ramo não existe mais, então refs/remotes/origin/feature é um Stale ramo que deve ser removido.
  5. Agora você tem 3 referências, incluindo refs/heads/feature, Porque git remote prune não remove nenhum refs/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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top