Branches no Git


Você está no meio da construção de weather-app, e quer tentar adicionar um recurso de previsão de cinco dias. Isso pode levar vários commits para acertar, e enquanto não acerta, você não quer que código inacabado fique ao lado do app que já funciona para todos que o usam. Uma branch é como o Git resolve isso: uma linha separada de trabalho onde o experimento fica, enquanto main continua funcionando exatamente como antes de você começar.
O que uma branch realmente é
Aqui está em ação:
$ git branch forecast
$ git switch forecast
Switched to branch 'forecast'Dois comandos: o primeiro cria uma nova branch chamada forecast, o segundo move você para ela. A partir daqui, todo commit que você fizer vai para forecast enquanto main fica exatamente onde estava.
Uma branch é um rótulo móvel que aponta para um commit. Neste momento, main e forecast apontam para o mesmo commit, aquele em que você estava quando executou git branch forecast. No momento em que você faz um commit enquanto estiver em forecast, esse rótulo avança para o novo commit. main fica exatamente onde estava até você alternar para ele e fazer um commit lá você mesmo.
Você pode ver ambos os rótulos com git branch:
$ git branch
forecast
* mainO asterisco marca a branch em que você está atualmente. Uma branch é apenas um nome apontando para um commit. Esse é o mecanismo inteiro. Tudo mais neste capítulo é uma variação de mover esses rótulos.
git branch forecast cria um novo rótulo apontando para seu commit atual, e git switch forecast move você para ele. Nada sobre seus arquivos muda até você realmente fazer um commit lá. Gosto de pensar em branches como adesivos em um commit: baratos de adicionar, baratos de mover, baratos de remover quando você termina. Criando e alternando entre branches
git branch forecast por si só cria o rótulo sem mover você para lá. Na maioria das vezes você quer ambas as coisas de uma vez, então git switch tem um atalho:
$ git switch -c forecast
Switched to a new branch 'forecast'-c é abreviação para "create". git switch -c tanto cria quanto move você para uma branch. Esse comando único é aquele que você vai usar quase toda vez que começar um novo trabalho.
Alternar branches muda qual snapshot seus arquivos mostram. Tente: a linha echo abaixo é uma maneira de um passo de criar um novo arquivo, src/forecast.js, com uma única linha nele, e tudo o mais são comandos que você já conhece:
$ git switch forecast
$ echo "// five-day forecast logic" > src/forecast.js
$ git add src/forecast.js
$ git commit -m "Start forecast module"
$ ls src
forecast.js index.js
$ git switch main
Switched to branch 'main'
$ ls src
index.jsO arquivo não desapareceu. Ele vive na branch forecast, e o snapshot da branch main nunca o incluiu. Volte para forecast e ele reaparece exatamente como você o deixou.
git switch -c forecast cria uma branch e move você para ela em um passo, que é o que você usará quase toda vez. Alternar branches troca qual versão de seus arquivos você vê, então um arquivo adicionado em uma branch está ausente em outra até você voltar. Nada é perdido, fica estacionado na outra branch. HEAD e HEAD desanexado
O Git acompanha onde você está atualmente com um marcador chamado HEAD. Normalmente HEAD aponta para sua branch atual, e essa branch aponta para um commit, então HEAD se move automaticamente toda vez que você alterna ou faz um commit. Se você fazer checkout de um commit específico pelo seu hash, ou uma tag (um rótulo fixo fixado em um commit, frequentemente marcando um lançamento), em vez de um nome de branch, HEAD se anexa diretamente a esse commit em vez de a um rótulo de branch. Esse estado é chamado de HEAD desanexado.
Você pode olhar ao redor livremente lá, e pode até fazer commit, mas nada aponta para esses novos commits por nome. Se você alternar para uma branch sem criar uma primeiro, eles ficam difíceis de encontrar novamente.
$ git switch a1b2c3d
HEAD is now at a1b2c3d Add password strength meterEssa mensagem, "HEAD is now at", é o Git dizendo a você que você saiu do território das branches e anexou HEAD a um único commit.
Para onde isso leva
Você agora criou branches, se moveu entre elas, e viu como main fica intocada enquanto você experimenta em outro lugar. A próxima pergunta é como o trabalho em uma branch volta para main, que é exatamente o que Mesclando e conflitos cobre. Se você quer um refresco em ler histórico de commits antes de continuar, Histórico explora git log, git show, e git diff.

