[[Git]] É um sistema de controle de versão gratuito e de código aberto projetado para lidar com tudo, desde projetos pequenos a muito grandes, com velocidade e eficiência.
**:: Referência ::** [git (git-scm.com)](https://git-scm.com/)
# Links Úteis
* [[Brief Introduction to Git For Beginners - Github]] - Vídeo de introdução à ferramenta.
# Comandos Básicos
```Bash
Git Config - -Global User.Name "<Sername>" # Define um usuário
GIT CONFIG--global user.email "<mail>" # Define o e-mail do usuário
git init # Inicia um repositório Git
git status # Verifica os arquivos que foram modificados, adicionados, etc.
git add <file/s># Adiciona arquivos à área de preparação
git COMMIT -M MESSAGE # Armazena a versão da área de preparação no histórico de alterações do GIT
git clone <URL> # Recupera arquivos de um repositório online para um repositório local.
git checkout -b <Branch Name> # Cria uma nova branch e muda para ela.
git switch <branch name> # Muda para a branch indicada.
git push <Remote> <Branch> # Envia modificações de um repositório local para um repositório remoto.
git pull # Recupera todas as modificações do repositório remoto para o repositório local.
git show # Apresenta todas as modificações que acontecem na branch utilizada.
```
# Conceitos Básicos
Aqui estão os conceitos básicos para usar [[Git]].
- Repositório - Este é um local onde armazenaremos todos os arquivos relacionados a um projeto específico. Eles podem ser remotos (armazenados online no [[GitHub]], por exemplo) ou locais (armazenados em seu computador).
- Ramificação - é uma das formas possíveis
- Área de Preparação ou Staging Area - É aqui que as modificações e arquivos que queremos rastrear são alocados antes de serem enviados.
- Commit - Envia as modificações feitas e definidas na área de preparação para o histórico do [[Git]].
- Push - Envia as modificações do repositório local para um repositório remoto.
- Pull - Recebe as modificações de um repositório remoto em um repositório local.
# Conflitos de Mesclagem no Git
Um problema que pode surgir ao trabalhar com GIT, especialmente quando você está colaborando com outras pessoas, é algo chamado **Conflito de Mesclagem**. Um conflito de mesclagem ocorre quando duas pessoas tentam alterar um arquivo de maneira conflitante entre si.
Isso geralmente ocorrerá quando você usar `git push` ou `git pull`. Quando isso acontece, o GIT alterará automaticamente o arquivo para um formato que descreve claramente o conflito. Aqui está um exemplo onde a mesma linha foi adicionada de duas maneiras diferentes:
```python
A = 1
<<<<< head
B = 2
=====
B = 3
>>>> 56782736387980937883
C = 3
D = 4
E = 5
```
No exemplo acima, você adicionou a linha `b = 2` e outra pessoa escreveu `B = 3`, e agora devemos escolher uma delas para manter. O número longo é um _hash_ que representa o Commit que está em conflito com suas edições. Muitos editores de texto, como o [[Visual Studio Code]], também fornecem destaque e opções simples como “aceitar atual” ou “aceitar entrada”, o que economiza o tempo de exclusão das linhas adicionadas acima.
Outro comando GIT potencialmente útil é o `Git Log`, que fornece um histórico de todos os seus commits neste repositório.
Potencialmente ainda mais útil, se você perceber que cometeu um erro, pode reverter para um Commit anterior usando o comando Git Reset de duas maneiras:
- `Git Reset - -Hard <Commit>` reverte seu código exatamente como estava após o Commit especificado. Para especificar o Commit, use o Hash do Commit associado a um Commit que pode ser encontrado usando `git log`, conforme mostrado acima.
- `Git Reset - -Hard Origin/Master` reverte seu código para a versão atualmente armazenada online no [[GitHub]].