Ramificações são uma parte central dos fluxos de trabalho Git, sendo usadas para manter o código inacabado fora da base de código mestre. No entanto, se você trabalha muito com eles, pode ter um monte de referências de branch não utilizadas em sua listagem de branch que precisam ser deletadas.
Por que excluir ramos?
É importante entender como os branches funcionam antes de excluí-los. Em primeiro lugar, você não está realmente excluindo nenhum código – você está excluindo o referência de filial, que ainda pode levar à perda de dados em alguns casos, mas para a maioria dos fluxos de trabalho é totalmente inofensivo.
Você pode pensar nos commits do Git como uma cadeia apontando para trás, construindo seu histórico do Git desde o início do repo (é tecnicamente armazenado como blobs e árvores complicadas internamente, mas essa analogia funciona na maioria dos casos).
Ramificações de recursos são bifurcações nesta cadeia, criando duas histórias divergentes. Quando você cria um commit em um novo branch, uma referência de branch é criada e definida para apontar para esse commit. Os commits de mesclagem os trazem de volta juntos e também movem o feature
etiqueta para estar em linha com master
.
Neste ponto, feature
e master
ambos estão fazendo a mesma coisa. Você pode deletar o feature
referência, e nenhum código é perdido. Se você não pretende reutilizar este branch, é uma prática recomendada apenas excluí-lo.
No entanto, isso pode levar à perda de dados se a referência do ramo apontar para confirmações que não foram fundidas no master
linha do tempo (ou outro ramo). O Git reconhecerá que esses commits não são mais necessários, já que não há uma referência de branch ativa que os inclua, e os limpará quando fizer a coleta de lixo.
Você também pode optar por não excluir ramos. No entanto, a referência do ramo não mudará com master
, que continuará avançando. Se você fizer um novo commit no branch do recurso, ele criará um “novo branch” no histórico, que pode ser mesclado, mas pode estar seriamente desatualizado.
Por esse motivo, a menos que você esteja constantemente mesclando duas ramificações, é melhor excluir as ramificações do recurso depois que elas forem mescladas para limpar seu histórico.
Excluir filial local
O Git não permitirá que você exclua o branch em que o HEAD está, então você precisará alternar seu branch de trabalho de volta para master
. A menos, é claro, que você queira excluir master
por algum motivo.
git checkout master
Então, você pode usar git branch
com o -d
sinalizar para excluir um branch:
git branch -d branch_name
Por causa da maneira como o Git lida com os branches, esse comando pode falhar em certas circunstâncias. Git realmente mantém três ramos para cada “filial”: a filial local, a filial remota e uma filial de rastreamento remoto geralmente chamada origin/branchname
.
o -d
flag irá excluir apenas branches que foram empurrados e mesclados no branch de rastreamento remoto. Isso geralmente é o que você deseja para operações normais, mas se quiser excluí-lo à força, você pode executar o mesmo comando novamente com uma letra maiúscula -D
bandeira:
git branch -D branch_name
Tenha em mente que este levará à perda de dados se os commits não forem mesclados.
Excluir filial remota
Excluir branches no controle remoto também é fácil. Para excluir branches remotos, execute git push
com o -d
, que fará com que o branch seja removido se você tiver acesso para fazer isso.
git push origin -d branch_name
Dependendo do seu provedor Git, como Github ou Bitbucket, você pode ter que habilitar a exclusão de branch nas configurações online, e pode haver ferramentas lá para lidar com a exclusão.
No entanto, isso não enviará as alterações para as máquinas clientes, até que elas sejam executadas git fetch
com o --prune
bandeira, que limpará galhos antigos:
git fetch --all --prune
Excluindo automaticamente ramificações de solicitação de pull do Github
Na verdade, o Github tem um bom recurso para repositórios para limpar automaticamente branches criados a partir de solicitações pull. Você pode ativá-lo nas configurações, em Opções> Botão Mesclar:
0 Comments