Branches e Repositórios Remotos- Parte 3
Tags: git, beginners
Published: 2021-06-20 11:41:34

Finalmente chegou a hora de falarmos de Branches e Repositórios. Se você não acompanhou as outras postagens da série, é bom que as leia antes de começar essa aqui, por fim, vamos lá.

##Branches
Entenda branches como uma linha de desenvolvimento independente. Algo similar à você ter um modelo de Slide para apresentações, fazer uma cópia dele, e começar a fazer suas alterações nessa cópia. 
Ok...mas quais as vantagens disso? Muitas. Se por acaso as alterações que você fizer ficarem ruins, ou não estiverem do gosto que você esperava? Caso tenha feito a cópia pode excluir e começar daquele slide modelo novamente, caso contrário, lamento muito. Dito isso acho que ficou claro que as branches criam "cópias" de uma linha de desenvolvimento, para uma outra linha, onde você possa trabalhar em novas features, corrigir problemas, alterar algum campo, sem causar danos no código principal. Agora chega de lenga lenga e vamos è mão na massa. 

Primeiro de tudo, pra ficar mais visual essa história de branch, vou usar o site [learn-git](https://learngitbranching.js.org/?locale=pt_BR) pra gente testar os comandos.

Como crio a branch?
```
git branch branch-1
```

Lá no learn-git vai aparecer assim:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d8npkek29n2bmy4pj8jq.png)

Repare no `*` ao lado da branch `main`(mais comumente chamada de "master"), isso quer dizer que aquela é sua `HEAD`(guarde essa palavra na mente pois é ela que aparece no terminal) que nada mais é do que a branch na qual você esta fazendo suas alterações no momento. Vamos fazer um commit na branch main:
```
git commit -m "commit branch main"
```


> Se ainda ficou um pouco complexo entender as branches pense nelas também como "pastas" com cópias dos arquivos de uma pasta principal, na qual você vai adicionando novos arquivos e fazendo alterações, cada alteração salva é o equivalente à um commit. No momento, só criamos a branch, ou seja, uma "cópia" identica à da pasta principal, então do ponto de vista do Git, elas estão "no mesmo ponto", com os mesmos arquivos e conteúdos.

E agora nossa imagem ficou assim:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lynsaa3r317acggqs70n.png)

Visualmente fica claro que os commits estão sendo gerados na branch main, a cada commit uma snapshot é tirada e nossa branch avança. Agora vamos mudar pra `branch-1` e fazer um commit nela, o comando pra mudar é:
```
git checkout branch-1
```
E o comando que fiz pra gerar o commit foi o:
```
git commit -m "commit branch-1"
```

Feito isso nossas duas linhas de desenvolvimento agora ficam bem visuais.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0n8d25ta21tmpss3qpa8.png)

Ai você pode brincar e ir criando commits e branches e ver como funciona visualmente, esse site é ótimo pra entender esses conceitos.

Um último comando que na verdade é um atalho para criar a branch e já utilizá-la é o:
```
git checkout -b branch-2
```

##Repositórios
Algumas das vantagens de usar o git como um repositório distribuído ao invés de um centralizado são:
* Segurança em caso de perda de dados. Já que geralmente os dados ficam em um servidor que não seja sua máquina os dados ficam menos suscetíveis a se perderem, ainda mais se estiverem em algum serviço de nuvem como Github, Gitlab, etc;
* É menos burocrático. Você pode criar branches, commits e merges sem acessar o repositório remoto;
* Permite à você colaborar com desenvolvedores remotos sem a necessidade de alterar o repositório principal(fazendo um fork, por exemplo).

Bom, um repositório remoto é o que o próprio nome diz (dãaaaar rsrs), é uma cópia do seu código em outra máquina ou serviço. Nos casos mais comuns é no Github, então vamos enviar nosso repositório local para ele.

Primeiro, obviamente faça uma conta no [Github](https://github.com/signup). Feito isso vamos já criar nosso primeiro repositório no Github clicando em "New", lá no canto esquerdo em verde.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kace9p7hehj412c66phl.png)

Agora temos alguns pontos para preencher:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p99txz16i7t4rh3i85tp.png)

* O nome do repositório;
* Uma descrição(opcional);
* Visibilidade - Pública ou Privada;
* Arquivos que você quer adicionar já na criação do seu repositório;

Dê um nome ao seu repositório, deixe-o como Público e vamos adiante. Você já deve estar vendo uma tela igual à abaixo, com os comandos necessários para inserir esse repositório remoto na sua máquina.
  
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5rfgz2x7rwz73xjos4q.png)
 
Eu vou usar os 3 comandos da parte debaixo da imagem, respectivamente o que eles fazem é:
* Adicionar o repositório remoto do Github ao nosso git com o apelido de "origin";
* Renomear nossa branch `master` para `main`(pra isso serve o `-M`);
* Enviar nossos arquivos do nosso repositório LOCAL e branch ATUAL(no caso a `main`) para o repositório REMOTO(que apelidamos de `origin`) na branch também de nome `main` e "rastrear"(opção `-u`) as mudanças que ocorrerem na branch remota.

Essa última linha é importante pois cria um relacionamento entre nossa branch `main` local e a `main` remota(Github), assim, nosso git conseguirá nos dizer caso exista alguma mudança lá que ainda não foi aplicada aqui. Veremos isso  em outro post.

No nosso terminal(Git Bash, no meu caso), dentro da pasta do nosso projeto, vamos copiar e colar nossos comandos.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tm8s38x33wj275sm8old.png)

Aqui pode ser que seja solicitado à você fazer login no Github.

Por fim basta voltar na tela do nosso repositório no github e dar um F5 ou atualizar a página que nosso commit já vai aparcer lá!
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/moqel3lwz7zcwcnzvl1l.png)
 

Fim de mais uma parte, logo mais vem as outras!