Comandos básicos GIT e vídeo de uso no JetBrains
Published: 2023-06-01 20:59:34

# Conteúdo <a name="content"></a>

1. [Introdução](#introducao)
2. [Instalando o GIT](#instalacao)
3. [Cenário de estudo](#cenario)
4. [Comando - git init](#gitInit)
5. [Comando - git status](#gitStatus)
6. [Comando - git add](#gitAdd)
7. [Comando - git commit](#gitCommit)
8. [Comando - git log](#gitLog)
9. [Comando - git diff](#gitDiff)
10. [Comando - git branch](#gitBranch)
11. [Comando - git merge](#gitMerge)
12. [Comando - git clone](#gitClone)
13. [Comando - git pull](#gitPull)
14. [Comando - git push](#gitPush)
15. [Linkedin](#linkedin)

## Vídeo - Git e Github sem linhas de comando

{% youtube https://youtu.be/nXTmM3Kd_FI %}

## Introdução <a name="introducao"></a>

Independente da linguagem de programação que você domina (ex. Java, C#, .NET, Python, Kotlin, Javascript, etc) ou de seu perfil na área de TI como _backend_, _frontend_, _fullstack_, _devops_, entre outros perfis; cedo ou tarde o [GIT](https://git-scm.com/) fará parte de sua vida profissional.

De acordo com o site oficial:

> Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

**Em resumo, um sistema de controle de versões distribuído aplicável a projetos de qualquer tamanho.** Mas o que é um sistema de controle de versões? Ora, com o GIT conseguimos gerenciar as alterações feitas em nosso código, controlando o que foi alterado, por quem foi alterado, e acompanhar todo o histórico de seu versionamento.

### E o tal do GitHub? 

Já o [GitHub](https://github.com/) é uma plataforma de armazenamento de repositórios GIT em nuvem, além de armazenar localmente em seu GIT, você pode usar o GitHub como _backup_.

Além do GitHub temos outras plataformas concorrentes bastante utilizadas como o [GitLab](https://gitlab.com), [Bitbucket](https://bitbucket.org/).

Neste artigo explicarei os comandos mais utilizados do Git e no vídeo publicado em [meu canal do Youtube](https://youtu.be/nXTmM3Kd_FI), como estes comandos podem ser utilizados pela interface do [IntelliJ](https://www.jetbrains.com/idea/) ou das ferramentas Jetbrains.

[voltar ao conteúdo](#content)

## Instalando o GIT <a name="instalacao"></a>

Para você aprender a usar o GIT, sugiro a instalação em sua máquina: faça o [download do site oficial](https://git-scm.com/downloads) e siga o passo a passo, é bastante intuitivo.

[voltar ao conteúdo](#content)

## Cenário de Estudo <a name="cenario"></a>

Aprenderemos a usar o Git para controlar as versões de um projeto fictício de armazenamento de arquivos TXT, que poderiam ser códigos fonte, scripts, ou qualquer outro tipo de arquivo.

Nosso primeiro passo será a criação de uma pasta/diretório _HelloGit_ em nossa máquina:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqmu6dwvp4ihb0fmgmr5.JPG)

Próximos passos:

- criar um arquivo ola.txt dentro da pasta criada

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rr0rp1m28u31otycwjlm.JPG)

- salvar o arquivo com algum conteúdo, por exemplo, frase _Olá_

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2a5yfvxd2imxd3guefm6.JPG)

[voltar ao conteúdo](#content)

## Comando 01 - git init <a name="gitInit"></a>

O comando `git init` aplicado em um diretório torna este diretório gerenciado ou versionado pelo Git. Todos os arquivos e subdiretórios presentes neste diretório poderão ser controlados e versionados pelo Git.
Usando o _git bash_, presente na instalação do Git, navegue até a pasta _HelloGit_ e digite `git init`

Após a execução do comando, a pasta *.git* responsável pelos arquivos de controle usado pelo git, será criada. Além da criação do _branch_ *master*.

Um *branch* podemos representar como um "contexto", um "namespace" ou a ramificação que possui um conjunto específico de arquivos versionados. O _branch_ *master* ou o _branch_ *main* representam por convenção, a ramificação principal do seu projeto, onde ficam os arquivos com as versões usadas em produção, ou versões oficiais.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f1wa41j72oq1rbdvaiqy.JPG)

[voltar ao conteúdo](#content)

## Comando 02 - git status <a name="gitStatus"></a>

O comando `git status` mostra o estado atual do _branch_, ilustrando os arquivos versionados e não versionados. Em nosso caso o arquivo _ola.txt_ não se encontra versionado ainda.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2uprnxrcgu72g7aywh0.JPG)

Para versionamos um arquivo ou conjunto de arquivos, o Git segue o fluxo, use a figura abaixo como referência para os próximos comandos:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulyj541qm2zzhenfe4r8.JPG)

Experimente também o `git status -s`, a versão curta de visualização do estado dos arquivos.

[voltar ao conteúdo](#content)

## Comando 03 - git add <a name="gitAdd"></a>

O comando `git add <nome_arquivo>`adiciona os arquivos que não estão sendo rastreados a uma área intermediária de controle, denominado _cache_.

Execute:

- `git add ola.txt`
- `git status` para visualizar o estado dos arquivos

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jbst2x7cp9qmv35xipxf.JPG)

Arquivos na zona de _cache_ podem ser editados livremente porque não estão versionados ainda. Caso queiras reverter o `git add`, pode ser usado o comando `git rm --cached`.

Quando existir múltiplos arquivos a serem adicionados, uma opção é usar o `git add .` com o "." representando todos os arquivos.

[voltar ao conteúdo](#content)

## Comando 04 - git commit <a name="gitCommit"></a>

O comando `git commit -m "<mensagem>"` versiona os arquivos adicionados no "_cache_". Através do _commit_ nossos arquivos passam a ser versionados pelo Git. Qualquer alteração nos mesmos, após o _commit_, exigirão um novo _commit_ atualizando a sua versão no repositório Git local.

Próximos passos:
- verifique o _status_ dos arquivos, note que temos o arquivo 
_ola.txt_ somente adicionado mas não "commitado".
- Execute `git commit -m "<mensagem qualquer>" para _commitar_ seus arquivos, e versionados pelo Git.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cvbdc36f20amzyn9du8.JPG)

[voltar ao conteúdo](#content)

## Comando 05 - git log <a name="gitLog"></a>

Agora que temos nosso primeiro _commit_, utilizaremos o comando `git log` para visualizar o histórico de _commits_ de nosso projeto. Ou a forma curta com o comando `git log --oneline`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxdhzgbjt9c4e97kcvg2.JPG)

Atente que cada commit possui um identificador.

### Alterando e adicionando diversos arquivos

Após um arquivo ser _commitado_, qualquer alteração neste arquivo, exigirá um novo ciclo de _commit_.

Vamos criar dois novos arquivos em nosso projeto: _hello.txt_ e _hallo.txt_.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sab7t44jkalr6ofsq9yl.JPG)

Agora repetir o ciclo:
- `git status`
- `git add .`
- `git status`
- `git commit -m "novos arquivos"`

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd05rn4miz1r9e6hrwrp.JPG)

Agora temos dois commits em nosso branch `master`:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ml69qiahgvqf9x7c5q5.JPG)

[voltar ao conteúdo](#content)

## Comando 07 - git diff <a name="gitDiff"></a>

Experimente alterar algum dos arquivos, por exemplo, modifique o `ola.txt` adicionando _Ola Mundo_.

Verifique as alterações com o comando`git diff`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wbzrx7l48jy0sb1ju9j1.JPG)

Atualize seu código, use novamente `git add .`, `git status`, `git commit -m <mensagem>`, `git log --oneline`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dr0oe2i5xf2sl0w1xs4r.JPG)

[voltar ao conteúdo](#content)

## Comando 08 - git branch <a name="gitBranch"></a>

Quando queremos implementar novas _features_, corrigir bugs, fazer melhorias, é comum a criação de _branches_ para alterações controladas nos arquivos. E ao final, fazemos o _merge_ do branch trabalhado ao branch principal.

Para criar o novo _branch_, opção 1:
- `git branch <nome_branch>` para criar o branch.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vf3gchh6ipgf6b02wesv.JPG)

- `git checkout <nome_branch>` para mudar para o branch.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/whp2jsg8bra281drlov9.JPG)

Observe com atenção que o _branch_ corrente é o *mudar-ingles*. Com o `git log` é possível ver os _branches_ existentes e o corrente (HEAD).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2otdsc1kzvenhvr9ot9b.JPG)

[voltar ao conteúdo](#content)

### Opção 2:
- `git checkout -b <nome_branch>`, cria e muda para o branch.

Volte para o *master* com `git checkout master` e crie um outro _branch_ a partir do *master*:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uea14n9khkpyax3tc37z.JPG)

Visualize as informações com `git log`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jy0v8pvjzc32abcc8mqq.png)

Finalmente no _branch_ inglês modifique o arquivo _hello.txt_ e no _branch_ alemão, o aquivo _hallo.txt_. Aproveite e observe que a alteração em cada _branch_ não afeta os outros _branches_. É a mágica de permitir o trabalho em _branches_ paralelos!!!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tfkc16t69ws5cqapblwi.JPG)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cf498scxlomdauxltd9x.JPG)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fnvwurcex0087whi0bf6.png)

[voltar ao conteúdo](#content)

## Comando 09 - git merge <a name="gitMerge"></a>

Com o trabalho concluído em cada _branch_, próximo passo será o _merge_ no _branch_ _master_ com o comando `git merge`.
Depois do _merge_ feito, podemos apagar o _branch_ com o comando `git branch -d <nome_branch>`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ah92seq767xgmc189z7b.png)

E com o _mudar alemão_:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8tba1iq08vu0f5pmh9i.png)

[voltar ao conteúdo](#content)

## Comandos com repositórios remotos

Para finalizar, quando usamos algum repositório remoto como o Github, temos que conhecer mais 3 comandos básicos: `git clone`, `git push` e o `git pull`.

### Git clone <a name="gitClone"></a>

O `git clone` é usado para clonar um repositório remoto. Quando queremos baixar um repositório do Github, por exemplo, copiamos sua URL e usamos o `git clone <URL>`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ox3qr5r0ip9i5rtavhsn.png)

[voltar ao conteúdo](#content)

### Git pull <a name="gitPull"></a>

O comando `git pull` é usado para atualizar localmente um _branch_ de sua localização remota. Por exemplo, uso do `git pull` no *master*.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe3hfz0qty3oyrnphn3s.png)

[voltar ao conteúdo](#content)

### Git push <a name="gitPush"></a>
 O comando `git push` faz o caminho inverso do `pull`. Este comando serve para enviar ao repositório remoto, as alterações de um _branch_ local.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/squqgkexopvjrkc3pawf.png)

[voltar ao conteúdo](#content)

## Palavras finais <a name="linkedin"></a>

Espero que tenham gostado de conhecer ou revisar os comandos básicos do Git.
[No vídeo do Youtube](https://youtu.be/nXTmM3Kd_FI), você conhecerá outros comandos como `rebase`, `squash`, `merge`, `stash` usando as ferramentas _JetBrains_.

Compartilhe com seus amigos e me adicione no [Linkedin](https://www.linkedin.com/in/joaocarlosvale/).

[voltar ao conteúdo](#content)