002/100 Days of Code: Git
Tags: 100daysofcode, javascript, git
Published: 2022-02-18 11:56:26

---
title: 002/100 Days of Code: Git
published: true
description: A forma mais assertiva para se contar a história do seu projeto
tags: 100daysofcode, javascript, git
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/inx77ex3fgf3oofvtkj4.jpg
series: 100 Days of Code
---

Git: A forma mais assertiva para se contar a história do seu projeto, usar essa ferramenta é como escrever a biografia do seu código! 🧐

## Ontem
Desenvolvi templates para validação de formulários com Regex e pesquisei algumas boas práticas na formatação das expressões.
> Durante o aprendizado de *Expressões Regulares* com o auxílio do [Regex101](https://regex101.com/) desenvolvi alguns materiais de consulta que em breve estarei compartilhando por aqui!

## Hoje
Enquanto me preparava para enviar um projeto front-end para o Gitlab notei que alguns dos comandos que havia estudado para gerenciar os versionamentos haviam sido esquecidos, por isso resolvi dedicar o final dessa noite para relembrar e exercitar.

### Git
É um versionador de código, ele te permite empacotar as modificações de arquivos com uma descrição e gerar a partir disso um ponto de salvamento que pode ser restaurado a qualquer momento. Ou seja, por mais que você altere o código, é possível retrocedê-lo a qualquer momento para qualquer ponto de salvamento.
> Uma ótima saída para quando um :bug: bug resolve aparecer na nova versão da aplicação e estamos com pouco tempo de reação!

Aqui estão alguns dos comandos que mais utilizado e que provavelmente você também utilizará:
```
git init
// inicia o versionador na pasta em que foi chamado

git clone <URL do Repositório>
// clona um repositório a partir de uma url
// exemplo: git clone https://github...

git add .
// adiciona todos os arquivos do projeto na monitoria
 
git remote add <nome> <url>
// adiciona uma referência para um repositório remoto a partir de uma url
// exemplo: git remote add origin https://github...

git commit -m "Mensagem do Commit"
// empacota as modificações do arquivos monitorados com uma descrição

git push <Nome do repositório remoto>
// envia o commit para o repositório remoto
// exemplo: git push origin

git pull <Nome do repositório remoto> <Nome da branch>
// Incorpora as alterações de um repositório remoto na branch atual
// exemplo: git pull origin master

git status
// Retorna os arquivos que estão sendo monitorados

git log
// Retorna o histórico de commits

git checkout <ID do Commit>
git restore --source <ID do Commit>
git restore .
// restaura o projeto ou um arquivo específico a um ponto anterior

git switch -c <Nome da Nova Branch>
git branch <Nome da Nova Branch>
git branch
git switch <Nome da Branch>
// git switch master

// Atalho para selecionar a branch master
git switch -

git tag -a <Tag> -m 'Descrição'
// cria uma tag e atribui ao commit atual, é como criar um marco, alguns utilizam esse recurso para indicar o início de nova versão da aplicação
// exemplo: git tag -a 1.0 -m 'Alpha Version'

git tag
// lista as tags
```

### Commit para múltiplos repositórios remotos
Esse processo já me atendeu muito bem, então vou destacá-lo aqui!
Já me deparei com uma situação em que precisava realizar o envio dos commits para dois repositórios remotos diferentes, mas por questão de produtividade precisava que o envio fosse realizado com apenas um comando de `git push`, ao invés de ficar alterando entre as branches e os repositórios remotos, aqui está a estratégia:

```
// Crie um repositório remoto
git remote add <Nome do Repositório> <URL do Repositório Remoto 01>

// Aponte a URL do outro repositório para o mesmo <Nome do Repositório> utilizado no comando anterior 
git remote set-url --add --push <Nome do Repositório Anterior> <URL do Repositório Remoto 02>

// Exemplo
git remote add origin https://github...
git remote set-url --add --push origin https://gitlab...
git remote set-url --add --push origin https://bitbucket...
```

Agora, quando enviar os commits com um `git push`, eles serão processados para todos os repositórios remotos adicionados.

## Disclaimer
Sei que não entrei em detalhamento de nenhum dos comandos, mas esse post é apenas a sumarização do estudo do dia, em breve estarei escrevendo alguns artigos mais detalhados abordando cada um desses temas e você pode acompanhá-los nesse e nos meus outros canais de comunicação.

## Outros Canais
Fique à vontade para entrar em contato comigo por essas outras mídias sociais também:
- [LinkedIn](https://www.linkedin.com/in/joaovitoralexandre/)
- [Instagram](https://www.instagram.com/alexandrebekor/)
- [Twitter](https://twitter.com/alexandrebekor)