> For the complete documentation index, see [llms.txt](https://womenwhogocwb.gitbook.io/letsgo/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://womenwhogocwb.gitbook.io/letsgo/mais/git.md).

# Git

O Git é um software para controle de versão de arquivos muito utilizado em desenvolvimento de sistemas. Rastreia e administra as alterações realizadas no código fonte do software, ou seja, ele salva todas e qualquer mudança realizada no texto, sejam adições de linhas, exclusões, com histórico atrelado ao usuário que fez essas alterações.

O controle de versão mantém esse histórico guardado, facilitando voltar para algum "estado anterior" caso alguma alteração cause problemas.

## GitHub

O [GitHub](https://github.com/) é uma plataforma de hospedagem de código-fonte e arquivos com controle de versão usando o Git.

Funciona como um drive, um local para salvar seus códigos online e compartilhar com mais pessoas que poderão trabalhar também. Assim, várias pessoas conseguem trabalhar juntas em um projeto e acompanhar as alterações que outras pessoas fizeram, mantendo o projeto sempre atualizado.

## Bash / GitBash

Bash é um interpretador de comandos, um entre os diversos tradutores entre o usuário e o sistema operacional conhecidos como shell.

Para quem está utilizando o sistema operacional Windows, recomendamos usar o GitBash para que possa ter disponíveis os comandos Git e outros comandos mais conhecidos em sistemas operacionais Unix (MacOS e distribuições Linux)

Vamos conhecer alguns comandos básicos:

***Como identificar o diretório atual***

```bash
pwd
```

***Alterar a localização para o diretório informado***

```bash
cd <diretório>
```

***Alterar a localização para o diretório superior***

```bash
cd ..
```

***Muda a localização para a pasta Home (pasta inicial do usuário)***

```bash
cd ~
```

***Lista o conteúdo do diretório atual***

```bash
ls
```

***Lista o conteúdo do diretório atual incluindo ocultos***

```bash
ls -a
```

***Limpa a tela do terminal***

```bash
clear
```

***Mostra os últimos comandos executados***

```bash
history
```

## Repositórios Remoto x Local

### Remoto

*Repositório remoto* é o repositório que você pode compartilhar seu código com outras pessoas. Exemplos de plataformas onde ele pode estar hospedado: GitHub, GitLab, BitBucket.

### Local

*Repositório local* é que está na sua máquina.

*Staging Area* é um espaço temporário onde você determina quais mudanças serão adicionadas.

Finalmente o *diretório de trabalho*, onde o git disponibiliza uma cópia dos arquivos para que você possa fazer as modificações.

Veja abaixo uma representação do que acabamos de falar:

![Esquema organizacional git](/files/-MemQpFrOgM-W5hlXf0X)

Veremos alguns comandos básicos:

***INIT***

Para iniciar um novo repositório *local* utilizando o comando `git init`. Caso seja necessário vincular a um repositório remoto é possível configuração de REMOTE em outro momento.

```bash
git init
```

***CLONE***

O comando `git clone` baixa um repositório já criado remotamente (github, gitlab, bitbucket)

```bash
git clone <repositorio-remoto>
```

***STATUS***

Lista arquivos modificados no `working diretory` ou arquivos adicionados em `staging area` que não tenham sido persistidos no repositório.

```bash
git status
```

***DIFF***

Mostra as diferenças entre os arquivos do `working diretory` e o repositório.

```bash
git diff
```

***ADD***

Adiciona arquivos/diretórios na `staging area`

```bash
# git add <variações>
git add .  # adiciona todas as alterações da pasta atual
git add arquivo.md  # adiciona somente o arquivo.md
git add arquivo.md arquivo2.md  # adiciona os dois arquivos indicados
git add pasta_x  # adiciona um diretório (pasta_x) inteiro incluindo as modificações dentro dele
```

***COMMIT***

Cria um `commit` enviando (persistindo) ao repositório local. Um commit, ou "revisão", é uma mudança individual em um arquivo (ou conjunto de arquivos)

```bash
git commit -m "mensagem"
```

***PULL***

Baixa as modificações do repositório remoto (`origin`) e ramificação principal (`main`).

```bash
# git pull <remoto> <branch>
git pull origin main
```

***PUSH***

Envia as modificações (commits) do repositório local para o repositório remoto (`origin`) e ramificação principal (`main`).

```bash
#git push <remoto> <branch>
git push origin main
```

***LOG***

Mostra o hitórico de commits do repositório local.

```bash
git log
```

## Branch

Ramificação da base do código. Não vamos aprofundar neste curso a utilização de ramificações, por isso vamos sempre utilizar a ramificação `main` (principal).

{% hint style="info" %}
**Dicas de conteúdos extras sobre Git**

Folha de dicas de GIT: [versão Web](https://training.github.com/downloads/pt_BR/github-git-cheat-sheet/) [versão PDF](https://training.github.com/downloads/pt_BR/github-git-cheat-sheet.pdf)

Para ampliar seu conhecimento em GIT, recomendamos [esse curso gratuito](https://www.youtube.com/watch?v=xEKo29OWILE\&list=PLHz_AreHm4dm7ZULPAmadvNhH6vk9oNZA).

Veja ainda este site (em inglês) que te ajuda a encontrar comandos: [Git Command Explorer](https://gitexplorer.com/)

E quando acontecem coisas não muito agradáveis no caminho, você pode ver algumas soluções no [Oh Shit, Git!?!](https://ohshitgit.com/pt_BR)
{% endhint %}
