Começando bem com Git/GitHub
Published: 2023-02-21 22:31:07

 1. Introdução

 2. Git Configuração Inicial

 3. Inicializando um repositório

 4. Adicionando arquivos ao controle de versão

 5. Criando versões do código com commit

 6. Como navegar entre as versões do código

 7. Trabalhando com Branchs

 8. Como unir o código

 9. Criando um repositório com o Github

 10. Atualizando o repositório local

 11. Enviando alterações para o repositório Github

 12. Resolver conflito de versão

 13. Processo completo para criar uma nova versão

 14. Boas práticas

# 1. Introdução

O Git é um sistema de versionamento descentralizado com foco em resolver o problema de branches e merges. Tem como característica não precisar de um servidor central que controla tudo.

**Sistemas de controle distribuídos**

* Git

* Bazzar

* Darcs

* Mercurial
>  Git — é um sistema de controle de versões distribuído
Github — um local onde armazenamos os códigos versionados no git

## Tipos de Merge

**Merge 2 way — 2 bases de comparação**

Sistema usado no Subversion. Faz comparação entre duas versões do projeto. É um sistema de versionamento centralizado configurado para pressupor que o histórico de um projeto nunca é alterado.

![](https://cdn-images-1.medium.com/max/2000/0*Geb8a9zORKkb9_FW)

**Merge 3 way — 3 bases de comparação**

Sistema usado no Git. Faz comparação entre duas versões modificados e o projeto original. É um sistema de versionamento descentralizado que permite modificar alterações e commits anteriores usando ferramentas como [git rebase](<https://docs.github.com/pt/github/getting-started-with-github/about-git-rebase>). No git quando fazemos um branch ele marca o commit de origem do branch. O git pode voltar no passado até o ponto onde o branch foi criado e olhar como era o arquivo original.

![](https://cdn-images-1.medium.com/max/2000/0*nxKPhEkuQ2B_WCcq)

## Comando base do Git

* git clone - puxar uma cópia do projeto para a sua máquina

* git add - marcar as alterações

* git commit - empacotar as modificações (algo equivalente ao diff)

* depois do diff feito pelo git commit o patch é passado por um algoritmo de hashing (SHA-1) para garantir a integridade.

# 2. Git Configuração

**Configurar dados de usuário**

git config --global [user.name](<http://user.name>) “Igor Pestana” - determina o nome do usuário

git config --global --unset-all [user.name](<http://user.name>) - remove a configuração do nome do usuário

git config --global [user.email](<http://user.email>) igorspestana@gmail.com - determina o e-mail do usuário

git config --global --unset-all [user.mail](<http://user.name>) - remove a configuração do e-mail do usuário

**Configurar editor de texto padrão**

git config --global core.editor vim

**Definir a branch padrão**

git config --global init.defaultBranch main

**Verificar as configurações**

git config --list

![](https://cdn-images-1.medium.com/max/2000/0*XQL1XxgAD25oo0Ci)

git config --global - escopo do usuário (configurações válidas apenas para um usuário específico)

git config --system - escopo do sistema (configurações válias para todos os usuários no sistema)

# 3 . Inicializando um repositório

* Criar uma pasta com o nome “Projeto 1 — dev aprender”

* Criar arquivo “meu codigo.txt”

* Abrir o terminal a pasta no terminal

git init - inicia o git no diretório

git status - verifica o status do repositório. se o local onde o código está guardado está ou não atualizado.

git remote add origin "url do repositório" - vincula o repositório local ao repositório criado no github.

![](https://cdn-images-1.medium.com/max/2000/0*iy_GrMQh-s9jLXq6)

* no commits yet — sem versões do código ainda

* Untracked files — arquivos que não foram adicionados no controle de versão

# 4. Adicionando arquivos ao controle de versão

git add “nome do arquivo” - adicionar arquivo ao controle de versão

![](https://cdn-images-1.medium.com/max/2000/0*05ThbAy5NXvLUp7l)

git add . - adicionar todos os arquivos no controle de versão

![](https://cdn-images-1.medium.com/max/2000/0*2kSeiGzHp8UI0n3V)

# 5. Criando versões do código com commit

git commit -m "nome do commit" - criar commit. é boa prática dar o nome “commit inicial” para o primeiro commit de um projeto.

É necessário informar o e-mail e nome que está associado ao commit.

![](https://cdn-images-1.medium.com/max/2000/0*Vau7RiXcKkUi2QW-)

![](https://cdn-images-1.medium.com/max/2000/0*xa91cCci3smwTYHh)

Commit criado.

![](https://cdn-images-1.medium.com/max/2000/0*OxMHK5Oh9yDrb4L5)

# 6. Como navegar entre as versões do código

git reflog - mostra os commits, o histórico das versões enviadas, o histórico das atualizações

![](https://cdn-images-1.medium.com/max/2000/0*6uY63hyuBvwOTJO9)

git reset - tira os arquivos da área intermediária, tira da staging area

git reset -hard <código> - para mudar de versão

![](https://cdn-images-1.medium.com/max/2000/0*AfhRMXvyLIeRHCuS)

git restore - retorna o arquivo a versão do repositório versionado, restaura o arquivo.

git log - histórico de eventos do git

![](https://cdn-images-1.medium.com/max/2000/0*teKeqcM6wiO9yX6w)

git log -p <arquivo> - histórico de eventos do arquivo

![](https://cdn-images-1.medium.com/max/2000/0*0CYMJBKbStGGRA85)

git checkout <hash do commit> - mudar repositório para a versão de um commit específico

![](https://cdn-images-1.medium.com/max/2000/0*FxqNcbtqxLMyHKCX)

git checkout master - mudar o repositório para a versão mais atual da branch

git reset --hard HEAD~1 - deleta o commit atual e mantém o arquivos da versão anterior

# 7. Trabalhando com Branchs

## O que são branches e como criar uma

Branches são caminhos diferentes que você vai seguir no desenvolvimento do projeto. E cada branch possui versões como novas funcionalidades ou correções de bugs.

Normalmente se usa uma branch estável (master) com o código em funcionamento e branches secundárias para testes de novos códigos. Depois que uma versão em uma branch secundária está estável é feito um merge entre a branch secundária e a branch principal.

git branch - mostra as branches

![](https://cdn-images-1.medium.com/max/2000/0*9a4ay-P0x54nYgyO)

**Adicionando e mudando de branch**

git branch <nome da branch> - cria uma nova branch. é boa prática dar o nome “staging” para o branch que está recebendo atualizações que ainda não estão testadas em produção. Os nomes dos branches devem fazer referência à funcionalidade ou alteração que está sendo feita no projeto original.

![](https://cdn-images-1.medium.com/max/2000/0*OiKYyHV4pCSiSVQl)

**Deletando uma branch**

git branch -D <nome da branch>

![](https://cdn-images-1.medium.com/max/2000/0*hM4Sh6SxBtamEij7)

**Adicionando e mudando de branch 2**

git checkout <nome da branch> - mudar de branch

git checkout -b <nome da branch> cria e alterna para a branch

![](https://cdn-images-1.medium.com/max/2000/0*xYtQwyzakoYgbCQ5)

# 8. Como unir o código

Depois de fazer atualizações no projeto e criar novas funcionalidades é necessário unir o código novo à branch master. Antes de fazer a junção é necessário conferir se a branch atual é a master.

**Juntando branchs**

git merge <nome da branch>

![](https://cdn-images-1.medium.com/max/2000/0*-u6ChB3O-o9FSfrZ)

![](https://cdn-images-1.medium.com/max/2000/0*QKlCLGzuMTSa70xA)

## Enviar branch para o github

git push --set-upstream origin <branch> - para enviar a nova versão do código para o servidor com a branch nova. sempre que uma branch for criado e ainda não estiver no servidor é necessário usar esse comando.

![](https://cdn-images-1.medium.com/max/2000/0*4FxxeXI92WsHPzWV)

![](https://cdn-images-1.medium.com/max/2000/0*cHCMHbwF-K1OIPoa)

As branches criadas herdam as commits fazendo com que o histórico do desenvolvimento do projeto não se perca.

![](https://cdn-images-1.medium.com/max/2000/0*Ri1-IUboLf69j7P2)

![](https://cdn-images-1.medium.com/max/2000/0*UXyNlxW_Vz4NYJ_F)

# 9. Criando um repositório com o Github

**Criar repositório**

![](https://cdn-images-1.medium.com/max/2000/0*9RENVCKdEGsTmJir)

**Criar chave ssh**

![](https://cdn-images-1.medium.com/max/2000/0*xi1ZwSYOfZLrdl5B)

**Adicionar chave ssh pública no github**

![](https://cdn-images-1.medium.com/max/2000/0*RlHn4oWiSRNP2y8R)

**Pegar o conteúdo local e adicionar no repositório remoto**

![](https://cdn-images-1.medium.com/max/2000/0*hEwFMnLulQt485bH)

    git remote add origin git@github.com:igorspestana/testegit.git
    git branch -M main
    git push -u origin main

![](https://cdn-images-1.medium.com/max/2000/0*HV5tb4HzbEGj9WNJ)

**Atualizar o github**

![](https://cdn-images-1.medium.com/max/2000/0*AfBXpKwzW77aZ-zc)

**Autenticação alternativa**

![](https://cdn-images-1.medium.com/max/2000/0*0v9kWe_Ie7XKhtDX)

**Gerar tolken no github**

 1. Settings

 2. Developer settings

 3. Personal access tokens

![](https://cdn-images-1.medium.com/max/2000/0*GWdNpv98eRoOHTP5)

![](https://cdn-images-1.medium.com/max/2000/0*zb_gu82qQIN8kc5V)

git config --global credential.helper cache - o próximo login ficará salvo e não precisará fazer inserir login e tolken.

git config --global --unset credential.helper - para desfazer o login sem verificação.

# 10. Atualizando o repositório local

Puxar novos commits do repositório Github

**Mostrar repositório remoto**

git branch -r

![](https://cdn-images-1.medium.com/max/2000/0*O1LvFK9-VRgDRNCG)

**Baixar do repositório remoto**

git pull

![](https://cdn-images-1.medium.com/max/2000/0*5YdXhFdLFfcsSrb3)

![](https://cdn-images-1.medium.com/max/2000/0*2v9q2opNEWdfy284)

![](https://cdn-images-1.medium.com/max/2000/0*AboFDGKRrVJRn8c1)

# 11. Enviando alterações para o repositório Github

git push - para enviar a versão do código para o servidor na nuvem

* Criar link do projeto na nuvem. Criar repositório no github e

git remote add origin "link do repositório" - definir para onde o código está sendo enviado

git push --set-upstream origin master - para enviar a versão do código para o servidor na nuvem no branch master. inicialmente é sempre enviado para a master.

![](https://cdn-images-1.medium.com/max/2000/0*dCs6ekkphitc5iX_)

# 12. Resolvendo conflito de versão

**Alteração **feita no github

![](https://cdn-images-1.medium.com/max/2000/0*NcCVHVxhq_cPKAok)

**Alteração feita no local**

![](https://cdn-images-1.medium.com/max/2000/0*t4a6DLjoFOGJNxrJ)

![](https://cdn-images-1.medium.com/max/2000/0*r57vhHqsUEEG8kU2)

**Indicação de conflito quando feito o git pull**

![](https://cdn-images-1.medium.com/max/2000/0*LeTRmj92xbKvFlBI)

**Resolução do conflito e git push**

![](https://cdn-images-1.medium.com/max/2000/0*NY6dWmQw9fYggxXt)

![](https://cdn-images-1.medium.com/max/2000/0*g3zRL2_Bwc4_WS0k)

# 13. Processo completo para criar uma nova versão

![](https://cdn-images-1.medium.com/max/2000/0*X3wnxJPivsh37Pui)

# 14. Boas práticas

**Ciclo de atualização de código**

Os nomes dos commits devem fazer referência à funcionalidade ou alteração que está sendo feita no projeto original. Ex. git commit -m “permitir cadastrar usuários”

**Ignorar arquivos específicos**

O arquivo .gitignore é usado para especificar arquivos que o git não vai reconhecer para ser adicionado no repositório.

    *.log
    bin/

![](https://cdn-images-1.medium.com/max/2000/0*RXUneNtDTsQ4nAGd)