git branch e git switch: criar, trocar e apagar branches
Branch é um ponteiro de 40 caracteres, não uma cópia da pasta. Como criar, trocar, listar e apagar — e como sair de um detached HEAD sem perder commit.
Uma branch é um nome que aponta para um commit e avança quando você cria outro
commit nela. Ela permite desenvolver uma busca sem colocar trabalho incompleto
na main. git switch troca a branch atual; git branch lista, cria, renomeia
e apaga referências.
No sandbox, main começou num commit real. O arquivo da referência contém o
hash completo:
cat .git/refs/heads/mainO ponteiro é menor que uma cópia da pasta
Criar uma branch não duplica o catálogo. O Git escreve uma referência com o
mesmo hash e aponta HEAD para ela. Pense num marcador de página: duas pessoas
podem colocar marcadores no mesmo capítulo e depois avançar para capítulos
diferentes. O limite é que branches formam um grafo de commits, não páginas
lineares de um único livro.
Antes da troca, HEAD era uma referência simbólica:
cat .git/HEADO conteúdo não é um arquivo de configuração para editar na mão. Ele serve para provar o mecanismo. Use comandos de alto nível para mover referências.
Crie e entre com switch menos c
-c cria e troca numa operação. O nome feat/busca comunica intenção e agrupa
visualmente branches da mesma categoria:
git switch -c feat/busca
git branch -vvO asterisco marca a branch atual. As duas apontam para 1667072 porque nenhum
commit novo aconteceu. Depois que a busca ganhar um commit, apenas
feat/busca avança.
cat .git/HEADSwitch separa troca de restauração
Historicamente, git checkout faz vários trabalhos: troca branch, entra em
commit e restaura arquivo. switch foi criado para a navegação; restore,
para arquivos. Checkout continua válido e aparece em projetos antigos, mas os
nomes específicos deixam a intenção mais legível para quem começa.
git switch main
git switch feat/buscaSe há alteração não commitada que seria sobrescrita, a troca é recusada. Não use force automaticamente. Faça commit coerente, guarde com stash ou descarte de forma consciente. A lição de git stash mostra o caso de uma urgência legítima.
Branch vv mostra vínculo e posição
Com um remote configurado, -vv exibe upstream e distância. Sem remote, ainda
mostra hash e assunto:
git branch -vvNão conclua que branches são iguais apenas porque o assunto é igual. Compare
os hashes e use git log --graph --all. O nome é móvel; o hash identifica o
commit naquele instante.
Nomes também formam uma linguagem de equipe. feat/busca, fix/frete e
docs/instalacao ajudam a reconhecer intenção, mas não substituem a mensagem
do commit nem a descrição do pull request. Evite colocar nome de pessoa como
única informação: a tarefa precisa continuar compreensível quando outra pessoa
assume. Antes de criar, atualize a base combinada pelo time; uma branch nascida
de uma main antiga começa com conflito e revisão desnecessários.
Branch local e branch remota não são o mesmo ponteiro. origin/main é a última
observação local da referência que mora no remote. Um git fetch atualiza essa
observação; git switch main não busca rede. Essa distinção explica por que a
lista pode mostrar sua main atrás do upstream mesmo depois de trocar para ela.
Leia git branch -vv e o grafo antes de decidir entre merge, rebase ou apenas
um novo fetch.
Detached HEAD é um commit sem branch atual
Ao entrar diretamente no hash, HEAD deixa de apontar para um nome:
git switch --detach HEAD
git status --short --branchInspecionar é seguro. O risco aparece ao criar um commit e sair sem dar nome a ele. O teste adicionou um livro e commitou:
git commit -m "feat: adiciona Refatoração"Ao voltar, o Git avisou que o commit ficaria sem branch:
git switch feat/buscab1c2cc5 feat: adiciona Refatoração
Switched to branch ‘feat/busca’
O hash do aviso é a saída de emergência. Crie uma branch apontando para ele:
git branch recupera-refatoracao b1c2cc5bd48a3055dc6634ef6e07016581425dcf
git branch -vvO reflog e os comandos de desfazer também ajudam quando o aviso já sumiu, desde que o commit ainda exista no armazenamento.
Apague com d antes de considerar D
git branch -d recusa uma branch não integrada. O teste protegeu
feat/abandono:
git branch -d feat/abandono-D força a remoção da referência. Ele não deve ser a resposta padrão ao
aviso. Confirme se o commit está em outra branch, tag ou remote e se o trabalho
é realmente descartável. No sandbox, a exclusão consciente respondeu:
git branch -D feat/abandonoSua missão é criar uma branch de tarefa, fazer um commit nela, voltar à main e desenhar os dois ponteiros. Depois entre em detached HEAD num commit antigo e saia sem criar trabalho. Termine quando o merge de branches parecer a reunião de duas linhas do grafo, e não a cópia de duas pastas. A lição de rebase vem depois, quando a diferença entre mover uma referência e recriar commits já estiver clara.
Perguntas frequentes
branch duplica todos os arquivos do projeto?
Dúvidas e comentários
Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.
Entrar para perguntarÉ o mesmo login gratuito dos cursos.
Nenhuma dúvida por aqui ainda — a primeira pode ser a sua.
Todo o código deste artigo foi executado em git version 2.54.0 (Apple Git-156) no macOS 27, e as saídas exibidas são as reais — como produzimos este conteúdo.
Fontes consultadas
- Git — git branch — git-scm.com
- Git — git switch — git-scm.com


