Publicado em 13 de Maio de 2020 às 16:28

Última atualização em 3 de Novembro de 2020 às 19:54

{Resumo, cheat sheet, resumão, folha de dicas} Git - Em português

git
Acompanhe esse conte√ļdo pelo YouTube

Nesta página você encontra um resumo de Git baseado no curso Tutorial Git.

Comandos gerais

Checar se o Git est√° instalado
$ git --version
git version 2.17.1

Se n√£o estiver, visite este site para instalar.

Dizer ao Git quem é você

Esses comandos fazem o seu nome e e-mail aparecerem nos commits feitos por você.

$ git config --global user.name "SeuNome"
$ git config --global user.email "SeuEmail"
Criar um repositório

Execute esse comando na pasta onde você deseja criar o seu repositório, ou passe como argumento o local onde o repositório deve ser criado.

$ git init
# ou
$ git init fabio/projetos/meu-projeto
Checar o status do repositório

Exibe a branch atual, arquivos monitorados e n√£o monitorados, e arquivos na √°rea de staging e fora dela.

$ git status
Exemplo de resposta:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        seu_arquivo

nothing added to commit but untracked files present (use "git add" to track)
Come√ßar a monitorar arquivos e/ou adicionar arquivos a √°rea de staging (‚Äúpreparar para o commit‚ÄĚ, ‚Äúcolocar as compras no carrinho‚ÄĚ)
$ git add arquivo1 arquivo2 arquivo3

√Č poss√≠vel passar v√°rios arquivos de uma vez para o comando git add. Por exemplo, para adicionar todos os arquivos e pastas do diret√≥rio onde o comando √© executado, basta digitar:

$ git add .

Para adicionar uma pasta:

$ git add minha-pasta
Salvar altera√ß√Ķes (‚Äútirar uma foto do reposit√≥rio‚ÄĚ, ‚Äúfinalizar a compra‚ÄĚ)
$ git commit -m "Mensagem explicando o que foi feito"
Visualizar modifica√ß√Ķes feitas em arquivos
$ git diff
# outra opção
$ git diff seu_arquivo
Visualizar histórico do projeto (logs)
$ git log

√Č interessante saber algumas combina√ß√Ķes do git log, por exemplo:

# Exibir os √ļltimos n commits
$ git log -n

# Exibir commits em uma linha
$ git log --oneline

Leitura recomendada.

Visualizar informa√ß√Ķes espec√≠ficas de um commit
$ git show HashDoCommit
Ignorar arquivos (por exemplo pastas de ambientes virtuais, arquivos com informa√ß√Ķes confidenciais, etc.)

Crie um arquivo chamado .gitignore na raíz do projeto (é o mesmo lugar onde você digitou git init) e dentro desse arquivo escreva o nome dos arquivos ou pastas que devem ser ignorados.

Recomendação: Utilize templates!

Se estiver usando o VSCode, baixe esta extens√£o.

Caso contr√°rio, utilize este site.

Enviar um repositório git local para o GitHub

Dado que o repositório no GitHub ainda não existe, o primeiro passo é criá-lo.

Acesse sua conta do GitHub e escolha a op√ß√£o ‚ÄúNew Repository‚ÄĚ.

Nomeie seu reposit√≥rio, adicione uma descri√ß√£o e selecione se ele ser√° p√ļblico (qualquer pessoa do mundo pode visualizar seu conte√ļdo) ou privado (apenas quem voc√™ autorizar poder√° visualizar o conte√ļdo).

N√£o marque a op√ß√£o ‚ÄúInitialize this repository with a README‚ÄĚ.

Clique em Create repository.

Siga as instru√ß√Ķes da pr√≥xima tela. Por exemplo:

$ git remote add origin https://github.com/SEU_NOME_DE_USUARIO/NOME_DO_REPOSITORIO.git
$ git push -u origin master
Enviar altera√ß√Ķes locais para o reposit√≥rio remoto (j√° existente e j√° registrado como origin)
$ git push
Trazer altera√ß√Ķes do reposit√≥rio remoto para o local
$ git pull
Clonar um repositório do GitHub
$ git clone https://github.com/USUARIO/NomeRepositorio.git
Listar remotes do repositório
$ git remote -v
Armazenar credenciais GitHub em memória (isso é seguro!)
$ git config --global credential.helper cache
# ou
$ git config --global credential.helper 'cache --timeout=TEMPO_EM_SEGUNDOS'

Branches

Listar branches
$ git branch
Criar uma branch
$ git branch nome-da-branch
Trocar de branch
$ git checkout nome-da-branch
Criar uma branch e j√° trocar pra ela
$ git checkout -b nome-da-branch
Criar uma branch a partir de um commit (e j√° trocar pra ela)
$ git checkout -b nome-da-branch HashDoCommit
Renomear branch
$ git branch -m novo-nome
Deletar branch

-D: deleta sem dó nem piedade. Cuidado para não perder o seu trabalho.

-d: só deleta se o trabalho realizado na branch tiver sido enviado para um repositório remoto ou unido com outra branch através de um merge.

$ git branch -D nome-da-branch
# ou
$ git branch -d nome-da-branch
Listar todas as branches (locais e remotas)
$ git branch -a
Deletar branch remota
$ git push -d RemoteName nome-da-branch
# por exemplo
$ git push -d origin minha-branch-123

Merge

Trazer altera√ß√Ķes de outra branch para a branch atual
$ git merge nome-da-branch

Essa operação pode gerar conflitos. Você deve resolver esses conflitos (sozinho ou com a ajuda dos colegas de projeto) para a operação ser concluída.

Preste muita atenção nos conflitos, eles precisam ser resolvidos!!!

Se você não pode resolver os conflitos, considere abortar a tentativa de merge:

$ git merge --abort

Visualização do merge:

Trabalho em equipe

GitHub Flow

Desejo criar uma nova feature, o que fazer?

Criar uma branch baseada na master
Trabalhar normalmente nessa branch (com adds e commits)
Abrir uma pull request (com a inten√ß√£o de colocar na branch master as altera√ß√Ķes feitas na branch de desenvolvimento)
Discutir e revisar as altera√ß√Ķes com os outros membros da equipe
Fazer um deploy das altera√ß√Ķes
Finalizar o merge
Leitura recomendada.

Forking Flow/Open Source Flow

Fluxo usado quando desejamos trabalhar em repositórios que não temos permissão de escrita.

Fazer fork do repositório de interesse
Clonar o fork para o ambiente de desenvolvimento (git clone)
Configurar remote origin para que ele aponte para o nosso fork
Configurar remote upstream para que ele aponte para o repositório central/oficial
Seguir com o desenvolvimento como desejar (por exemplo, seguindo o GitHub Flow)
Desse jeito, mandamos nossas altera√ß√Ķes para o nosso reposit√≥rio remoto (o nosso fork, criado na nossa conta do GitHub) e baixamos as altera√ß√Ķes do reposit√≥rio central/oficial.

Visualização Forking Flow:

Adicionar um remote
$ git remote add NomeRemote https://github.com/USUARIO_GITHUB/NOME_REPOSITORIO.git
# exemplo
$ git remote add upstream https://github.com/USUARIO_GITHUB/NOME_REPOSITORIO.git

Revertendo comandos com git reset

Reverter git add

Atenção!

Se você acabou de dar um git add para começar a monitorar um arquivo e quer reverter essa operação, esse é o comando:

$ git rm --cached seu_arquivo
rm 'seu_arquivo'

Se você quiser reverter e também deletar o arquivo:

$ git rm -f seu_arquivo
rm 'seu_arquivo'

Esses mesmos comandos também devem ser usados para parar de monitorar um arquivo do seu repositório (independente de quando ele foi adicionado)

Remover arquivo da √°rea de staging

Se voc√™ usou o git add para colocar as altera√ß√Ķes feitas em um arquivo na √°rea de staging, o comando para reverter o git add √© esse aqui:

$ git reset HEAD arquivo

Se al√©m de reverter o git add voc√™ tamb√©m quiser descartar as altera√ß√Ķes feitas nos arquivos, utilize esse comando:

$ git checkout arquivo
Reverter um git commit

Soft: Reverte o commit, voltamos exatamente um passo. As altera√ß√Ķes continuam feitas nos arquivos e continuam na √°rea de staging.

Mixed: Reverte o commit, voltamos exatamente dois passos. As altera√ß√Ķes continuam feitas nos arquivos mas n√£o continuam na √°rea de staging.

Hard (cuidado!): Reverte o commit, voltamos exatamente tr√™s passos. As altera√ß√Ķes feitas nos arquivos s√£o descartadas, n√£o h√° nada na √°rea de staging.

HEAD~1 significa que estamos voltando um commit, voc√™ pode mudar esse n√ļmero se quiser reverter mais commits.

$ git reset --soft HEAD~1
$ git reset --mixed HEAD~1
$ git reset --hard HEAD~1

Visualização git reset:

Revertendo comandos com git revert

Reverter um commit

No exemplo abaixo, revertemos exatamente o √ļltimo commit realizado.

HEAD~1 reverteria o pen√ļltimo.

E assim por diante.

$ git revert HEAD
# outra opção, passar o commit
$ git revert HashDoCommit

Visualização git revert:

Reverter comandos no repositório remoto

Podemos usar os dois comandos vistos acima, git reset e git revert. Após executar um desses dois comandos devemos executar:

$ git push -f

Outros comandos

Combinar duas branches eliminando a bifurcação (rebase)

Estando na branch que receber√° as altera√ß√Ķes, digite:

$ git rebase nome-da-branch
Squash: Espremer commits

Nesse caso vamos pegar os 3 commits mais recentes e fazer eles virarem apenas 1

$ git rebase -i HEAD~3

Escreva pick (ou p) na frente do commit final e squash (ou s) na frente dos commits que ser√£o espremidos

Stash: Salvar o seu trabalho sem fazer commit

Lista op√ß√Ķes

$ git stash list

Adiciona ao stash

$ git stash

Recupera suas altera√ß√Ķes

$ git stash apply
# ou
$ git stash apply stash@{0}
Trazer para a minha branch apenas um commit de outra branch: cherry-pick
$ git cherry-pick HashDoCommit

Lembre-se

As vezes o que a gente precisa não é de um resumão, e sim mergulhar na documentação. Divirta-se.


Compartilhe

Gostou deste artigo? Compartilhe para esse conte√ļdo chegar a mais pessoas!

N√£o perca nenhum conte√ļdo!

Se você quiser receber um e-mail sempre que eu postar um artigo novo, basta se inscrever aqui:


Artigos que podem ser do seu interesse

Eu ainda n√£o escrevi outros artigos sobre esse assunto.