O que é poda Git?

86

Eu acidentalmente apaguei alguns branches remotos e eu realmente não sei qual é a consequência disso (eu cliquei no botão "Prune remote branches" nas extensões Git, pensando que isso excluiria um branch remoto).

A documentação oficial diz "git-prune - Remova todos os objetos inacessíveis do banco de dados de objetos". Eu realmente não entendo o que isso significa. Estou supondo que isso pode ter removido ramificações mescladas, mas não tenho certeza.

Daniel Ball
fonte
Possível duplicata de stackoverflow.com/questions/4040717/…
Raghavan
1
Pode valer a pena dar uma olhada em git gc: git-scm.com/docs/git-prune também.
kovac

Respostas:

91

"Prune remote branches" nas extensões Git executa o git remote prunecomando, que remove seus branches locais de rastreamento remoto onde o branch não existe mais no remoto.

Veja aqui: https://git-scm.com/docs/git-remote#git-remote-empruneem

1615903
fonte
então basicamente dá prioridade ao seu controle remoto e ajusta seu local para combinar com seus ramos remotos?
Honey,
3
@Honey não, ele apenas remove os ramos de rastreamento remoto locais , ramos normais não são tocados.
1615903
32

Este apenas lixo coleta seus galhos.

Isso significa que, se um objeto (um commit) não puder ser alcançado em nenhum dos ancestrais do seu branch, ele será removido do banco de dados git e, como tal, não poderá mais ser alcançado.

Isso apenas limpa um pouco o repositório git e o torna mais leve.

blue112
fonte
4
De acordo com a documentação, para tarefas de manutenção de casa como essa, pode ser melhor fazer um git gcao invés de um, git pruneque essencialmente fará uma poda git também.
kovac
1
Votar negativamente: esta resposta (e a pergunta) confunde git prunee git remote prune. Eles não são os mesmos, o último realmente limpa os ramos que não existem mais no remoto, enquanto deixa os ramos locais intactos.
JBert
12

É importante saber que a poda é vinculada ao repo . Nem todo mundo sabe que você pode vincular seu repo local a vários controles remotos. É útil quando, por exemplo, você trabalha com um projeto de código aberto e é forçado a trabalhar por meio de garfos.

Portanto, o comando prune requer um nome de repo. Na maioria dos casos é git remote prune origin, mas você pode chamar seu repo de qualquer coisa, não precisa ser origin.

yuranos
fonte
2

Pode haver branches de recursos remotos que são removidos após serem mesclados no master. Podemos ter excluído os branches de recursos como forma de limpeza. Mas se você tiver feito check-out do branch excluído para o sistema local e definido como status de rastreamento, git pull não excluirá esses branches locais (porque eles já estão desconectados do servidor). Para limpar esse tipo de ramos órfãos locais, o git prunecomando será útil para ajudar.

Santhosh J
fonte