Git - Conceitos essenciais
Tags: git, brazilliandevs, productivity
Published: 2020-11-12 20:52:52

Olá Pessoal, Tudo bem?

Antes de mais nada, esse conteúdo é um overview do mundo Git para iniciantes. Acredito que esse assunto é muito importante para qualquer profissional da tecnologia atualmente. 

Quando nós começamos a entender esse pequeno mostrinho, ficamos confortáveis com alguns dos comandos mais utilizados como: git init, git add, git commit, git clone, git push e git pull. Não é do intuito desse artigo abordar esses comandos, caso você não tenha intimidade com alguns deles, sugiro o seguinte link.

O problema é que se você apenas conhecer essa sequência de uso básica do Git, você irá ficar preso e não irá usufruir de todo o potencial desta ferramenta de versionamento. Entretanto, descentralizado e mais como um sistema de arquivos do que apenas um versionamento de mudanças, o Git tem muito potencial a ser explorado.

Por isso, iremos adentrar alguns conceitos importantes que todo iniciante deveria saber.

### O que é um repositório Git?
Git é um programa que rastreia as mudanças em arquivos, ele pode ser inicializado em um projeto para criar um repositório Git. O repositório Git é uma pasta oculta chamada .git dentro de um projeto. Este repositório rastreia todas as mudanças realizadas nos arquivos do seu projeto para construir um histórico ao longo do tempo, isso significa que se você excluir esta pasta .git, você excluirá todo o seu histórico de projetos.

### O que é um Git commit?
Um commit é um instantâneo do seu repositório git em um ponto no tempo. Para entender um commit, precisamos falar sobre seu Working Directory e um Staging Directory. Quando você modifica, adiciona, exclui ou renomeia um arquivo em seu repositório essa alteração não é imediatamente armazenada no repositório. Em vez disso, existe localmente em um diretório de trabalho em sua máquina. As mudanças podem então ser encenadas. Assim que as mudanças forem preparadas, salve essas mudanças no repositório executando um commit. Cada commit torna-se um instantâneo do seu repositório daquele ponto no tempo e cumulativamente forma seu histórico de repo. Em resumo, um fluxo de trabalho típico Git envolve fazer mudanças, preparar mudanças, e, em seguida, confirmar as alterações.

### O que é um Git remote?
Um repositório remoto, geralmente chamado de remote, é um repositório Git hospedado na Internet. A clonagem de um remote de controle, cria uma versão local desse repositórop em sua máquina, dando-lhe uma sandbox para experimentar sem afetar a base de código original. A clonagem também estabelece uma conexão entre o repositório local em sua máquina e o repositório remoto, permitindo ações push e pull com o projeto remoto. Vários clones de um único remote de controle podem ser criados por outros membros da equipe, permitindo que outras pessoas possam colaborar nos mesmo projetos de forma eficiente e com menos risco para o código original. 

### Como usar o Git Stash?
O stash é um comando que informa ao Git para guardar todas as suas alterações em um local temporário, deixando seu repositório limpo. Mas se você só precisar verificar uma branch diferente e não estiver pronto para commitar as alterações que você tem atualmente? Ou se você descobrir que verificou um branch errada e que suas alterações precisam estar em um ramo diferente?

É aqui que o Git Stash se torna útil, criar um stash salva mudança não confirmadas para que você possa trabalhar em outras coisas em seu repositório sem perdê-las e depois voltar suas alterações com um simples git stash apply.

Esse comando tem outras opções como drop e list, vale a pena investigar.

### O que é um Git diff?
Um Git diff pega 2 conjuntos de dados e diz o que mudou entre eles. Os conjuntos de dados podem ser arquivos, commits, branches, etc. Quando pegamos dois commits diferentes, o Git compara as mudanças entre eles, o diff mostra quais arquivos foram adicionados, modificados ou excluidos. Á medida que examinamos a diferença de cada arquivo, as linhas ou textos adicionados são comumente destacados em verde ou denotado com um sinal “+”, enquanto linhas excluídas são destacadas em vermelho ou denotadas com um sinal “-”. As diferenças fornecem informações úteis sobre seu repo, que podem ajudá-lo a revisar as alterações enquanto você decida se deseja realocar (rebase)ou mesclar (merge)ou apenas copiar e colar o código de um arquivo.

---
> É isso ai pessoal, espero que tenham gostado e que essas informações sejam úteis para vocês! Fique livre para perguntar algo no comentário, ou indicar algum erro que eu tenha feito.

Vou deixar também meu [Linkedin](https://www.linkedin.com/in/marcelo-santos-tecnologia/) para quem quiser entrar em contato!

Abraços!