[PT-BR]Comandos do Git: básico ao avançado
Tags: git, beginners, tutorial, braziliandevs
Published: 2023-02-24 15:00:00

Eu sei que já existem milhares de artigos como esse por ai, mas como eu poderia fazer uma série de posts sobre Git e GitHub sem falar dos comandos?

---

No dia a dia estes comandos são utilizados com muito frequência.

### Comandos Básicos

- `git config`

Quando você está utilizando o Git pela primeira vez ou com uma instalação nova, em um projeto colaborativo, esse comando é fundamental para configurar sua identidade de usuário, as informações nome e email serão empregadas em cada *commit.*

`$ git config –global user.name “Seu nome”`

`$ git config –global user.email “Seu email”`

---

- `git init`

O comando irá criar um repositório novo em branco e, a partir daí, será possível armazenar seu código fonte, alterar, salvar alterações etc.

`$ git init <Seu repositório>`

---

- `git clone`

Esse comando Git cria uma cópia exata de um repositório já existente.

`$ git clone <URL do seu projeto>`

---

- `git add`

Esse comando Git adiciona os arquivos especificados ao seu repositório, sejam arquivos novos ou arquivos anteriores que foram alterados. Oferece diferentes possibilidades de sintaxe.

`$ git add <nome do arquivo>` esse comando irá adicionar o arquivo em específico ao repositório

`$ git add` esse comando irá adicionar todos os arquivos novos e/ou modificados ao repositório

---

- `git commit`

É fundamental se estabelecer uma diferença entre git add e git commit: O git add adiciona seus arquivos modificados à fila para serem submetidos a um commit posteriormente. Os arquivos **não** passaram por um commit ainda.

É possível combinar os dois comandos em um único: `$ git commit -a` ou `$ git commit -m "seu comentário"`

---

- `git branch`

É comum na maior parte do tempo possuir múltiplas variações em seu repositório Git, chamadas de *branches* (“ramificações”).

A princípio pode parecer fácil se perder em diversos caminhos, mas o comando git branch facilita o gerenciamento de tudo isso. Com diferentes parâmetros, é possível listar, criar ou apagar os *branches.*

`$ git branch` (lista todas as ramificações)

`$ git branch <nome_do_branch>` (cria um *branch* com o nome especificado)

`$ git branch -d <nome_do_branch>` (deleta o *branch* com o nome especificado)

---

- `git checkout <nome_do_branch>`

Ainda sobre *branches*, esse comando Git pode ser utilizado para trocar de uma ramificação para outra.

---

### Comandos Intermediários

- `git remote add <nome> <url>`

Esse comando estabelece uma conexão entre seu repositório local e um repositório remoto.

---

- `git push -u <remote> <branch>`

Esse comando serve para subir suas modificações para um repositório **remoto** conectado anteriormente com git remote.

---

- `git fetch`

Quando você precisa baixar as mudanças criadas por outros membros do seu projeto colaborativo, você precisa do comando Git fetch. A partir desse comando, você irá receber todas as informações de commits, para avaliar, antes de aplicar essas alterações na sua versão local do repositório.

---

- `git pull <URL>`

O comando Git pull baixa o conteúdo do que foi alterado no repositório remoto para o seu repositório local e o atualiza para a última versão.

---

- `git stash`

Esse comando Git armazena temporariamente seus arquivos modificados em uma área chamada *stash* (“esconderijo”), sem interagir com os outros arquivos até ser necessário.

Para listar todos usamos:

`$ git stash list`

Quando for o momento de aplicar o conteúdo do *stash* a um *branch*, usamos o “apply”:

`$ git stash apply`

---

- `git show <hash_do_commit>`

Quer detalhes específicos sobre um commit que o log não mostra? O comando Git show é a resposta.

---

- `git rm <nome_do_arquivo>`

Para remover arquivos da sua pasta, você pode utilizar o comando git rm.

---

- `git merge <nome_do_branch>`

Esse comando Git integra as mudanças de dois *branches* diferentes em um único *branch*. Ele precisa ser iniciado a partir de um *branch* já selecionado, que será mesclado com outro, com o nome passado por parâmetro.

---

### Comandos Avançados

- `git rebase <base>`

Git rebase a princípio parece fazer o mesmo que um *merge*: ele integra dois *branches* em um *branch* único. Porém, esse comando refaz o histórico de commits, tornando-o linear. É o mais indicado para consolidar múltiplos *branches*.

---

- `git pull –rebase`

Essa é uma variação do comando pull mostrado anteriormente. A partir dessa instrução, o Git irá fazer um rebase (não um merge) depois de se utilizar um comando pull.

---

- `git cherry-pick <commit-hash>`

Esse é um comando poderoso que permite selecionar qualquer commit específico de um *branch* e aplicá-lo a outro *branch*, sem precisar de uma mescla completa. A operação fica adicionada no histórico.

---

- `git archive –format zip HEAD > archive-HEAD.zip`

Esse comando Git combina múltiplos arquivos em um único arquivo, como se fosse um arquivo zipado. Esse pacote pode ser aberto depois e os arquivos contidos podem ser extraídos individualmente.

---

- `git blame <nome_do_arquivo>`

O comando “culpa” - blame - ajuda a determinar qual usuário realizou qual mudança em um determinado arquivo.

---

- `git tag -a <nome_da_tag>`

Tags são uma boa opção para marcar uma *branch* e evitar alteração, principalmente em releases públicos. 

Note que por boas práticas uma tag sempre é criada como uma versão `$ git tag -a vX.X.X`

---

- `git diff`

Para comparar dois arquivos gits ou dois *branches* **antes** de passarem por um commit ou um push, é importante executar esse comando Git.

comparando o repositório ativo com o repositório local: `$ git diff HEAD <nome_do_arquivo>`

comparando duas ramificações: `$ git diff <*branch* de origem> <*branch* de destino>`

---

- `git citool`

Esse comando Git oferece uma alternativa gráfica ao commit.

---

- `git whatchanged`

Esse comando oferece informações de log, mas em formato raw.

---

### Extra

- `git help <comando que se tem dúvida>`

Existem inúmeros comandos no Git, muito mais do que os dessa lista, cada um com sua função, parâmetros e características. Felizmente, o próprio Git tem o comando help para trazer ajuda diretamente no terminal.