Principais Pontos
- Remover ramificações é uma ação comum em fluxos de trabalho Git.
- Utilize o comando “git branch -d [nome_da_ramificação]” para eliminar ramificações locais, mas atenção a alterações não integradas.
- Ferramentas como GitHub Desktop, GitKraken, Tower e Bitbucket possuem seus próprios métodos de exclusão, familiarize-se com cada um deles.
No Git, a criação de ramificações é um processo simples e eficiente, permitindo sua utilização sempre que necessário. No entanto, com a mesma facilidade, acumulam-se ramificações desnecessárias. Assim, como se realiza a exclusão de uma ramificação?
Por que apagar uma ramificação?
Ao aprender a estruturar um projeto com ramificações Git, é comum criar ramificações que posteriormente se mostram desnecessárias. A criação de ramificações é uma operação leve, rápida e com uso eficiente do espaço em disco, o que torna esta prática aceitável.
Muitos fluxos de trabalho de desenvolvimento Git incentivam a criação de ramificações, mesmo para tarefas pequenas. Um exemplo comum é a criação de uma ramificação separada para cada correção de bug.
Assim como criar ramificações, a sua exclusão deve fazer parte do seu cotidiano de trabalho.
Exemplo de Repositório com Ramificações
Os exemplos a seguir utilizam um repositório com a seguinte organização:
Este repositório possui duas ramificações: `main` e `dev`. Cada uma é uma ramificação local com sua correspondente remota no servidor de origem.
É fácil perder o controle das ramificações, por isso, aprenda como listá-las através da linha de comando ou visualizá-las em seu cliente Git preferido.
Excluindo Ramificações via Linha de Comando
A sintaxe básica para excluir uma ramificação é:
git branch (-d | -D) [-r] <nome_da_ramificação>...
Como Excluir uma Ramificação Local
A forma mais simples do comando remove uma ramificação local, desde que suas alterações tenham sido integradas:
git branch -d dev
Se tudo ocorrer corretamente, uma mensagem de confirmação será exibida:
Não é possível remover a ramificação que está ativa. Se tentar, uma mensagem como a seguinte aparecerá:
Ao tentar excluir uma ramificação local com alterações não integradas e não enviadas, essas alterações serão perdidas. Por padrão, o Git impede a exclusão nestes casos. No exemplo, a ramificação `dev` possui alterações que não foram enviadas para a ramificação remota:
Como a mensagem de erro indica, é possível forçar a exclusão usando a flag `-D`.
Uma ramificação local de rastreamento pode ser removida mesmo que não tenha sido integrada, desde que sua correspondente remota esteja atualizada. O Git ainda exibirá um aviso:
Como Excluir uma Ramificação Remota
A exclusão de uma ramificação remota é distinta. Use o comando `git push` com a flag `-d`, seguido pelo nome do remoto (geralmente `origin`) e o nome da ramificação:
Excluindo Ramificações Locais e Remotas com GitHub Desktop
Diferente do Git via linha de comando, o GitHub Desktop permite apenas a exclusão da ramificação ativa. Para tal, vá ao menu `Branch` (Ramificação), selecione a opção `Delete` (Excluir) e confirme a ação:
O GitHub Desktop não permite a exclusão da ramificação padrão (ex: `main`), mesmo que o Git permita. Se a ramificação padrão estiver ativa, a opção de menu é desabilitada.
Se a ramificação representar uma remota, o GitHub Desktop também oferece a opção de removê-la do remoto:
Excluindo Ramificações com GitKraken
O GitKraken exibe as ramificações locais e remotas na barra lateral esquerda. Cada uma deve ser removida separadamente.
Ao posicionar o cursor sobre o nome da ramificação, clique no menu `Ações da Ramificação` (três pontos verticais) e selecione `Excluir <nome_da_ramificação>`:
Uma mensagem de confirmação avisará que a operação é destrutiva. Confirme com o botão `Excluir`:
Semelhante ao Git via linha de comando, você deve mudar para outra ramificação para excluir a atual. Caso contrário, verá uma mensagem de erro:
Excluindo Ramificações Locais e Remotas com Tower
A exclusão de ramificações com Tower é similar ao GitKraken. O aplicativo exibe as ramificações locais e remotas no painel esquerdo. Clique com o botão direito sobre qualquer ramificação e selecione `Excluir` no menu:
Uma diferença importante é que você pode excluir a ramificação remota juntamente com a local durante a confirmação:
Excluindo uma Ramificação no GitHub
O GitHub é um repositório remoto, logo, as ramificações são remotas por padrão. Ao remover uma ramificação via GitHub, é necessário remover a ramificação local correspondente através de outro método.
Assim como o aplicativo GitHub Desktop, o site do GitHub não permite a exclusão da ramificação padrão. Caso tente, uma mensagem de erro será exibida:
Remover qualquer outra ramificação é simples. Na página de código do repositório, clique no link de ramificações, localize a ramificação desejada e clique no ícone `Excluir ramificação` (lixeira):
Não há verificação de alterações não integradas, o GitHub simplesmente exclui a ramificação imediatamente. Uma vez que representa sempre uma ramificação remota, este comportamento faz sentido.
Após a exclusão, você verá um botão para restaurar a ramificação. No entanto, esta é apenas uma funcionalidade de desfazer. Não confie nela, pois ao atualizar ou sair da página, a opção desaparece!
Excluindo Ramificações Locais e Remotas no Bitbucket
O Bitbucket, similar ao GitHub, não permite excluir a ramificação padrão. O Bitbucket define a ramificação principal nas configurações do repositório. Todas as outras ramificações podem ser excluídas na aba `Filiais`, através do menu `Ações` correspondente:
É possível remover várias ramificações de uma vez, facilitando operações de limpeza:
A Exclusão de Ramificações é Parte do Fluxo de Trabalho Git
As ramificações Git, especialmente com suas versões locais, remotas e de rastreamento, podem complexar seu fluxo de trabalho. No desenvolvimento diário, a criação e exclusão de ramificações locais é uma ação comum e essencial. É importante familiarizar-se com este aspecto central de um fluxo de trabalho Git.
Se lembrar-se de como excluir ramificações for um desafio, considere criar aliases para facilitar o processo.