DEV Community

Cover image for Git Cheat Sheat - Definitivo!
Jackson Emmerich
Jackson Emmerich

Posted on

Git Cheat Sheat - Definitivo!

Configuração Inicial

Configurar um nome e email


$ git config --global user.name "Danny Adams"
$ git config --global user.email "my-email@gmail.com"

Enter fullscreen mode Exit fullscreen mode

Configure o nome e email que serão anexados aos seus commits e tags.

Iniciando um projeto

Criar um repositório local

$ git init <directory>

Enter fullscreen mode Exit fullscreen mode

Crie um repositório local (omitindo o diretório atual para inicializar o diretório atual como um repositório Git).

Clonar um repositório remoto

$ git clone <url>

Enter fullscreen mode Exit fullscreen mode

Baixe um repositório remoto.


Adicionando as mudanças

Adicionar um arquivo ao staging

$ git add <file>

Enter fullscreen mode Exit fullscreen mode

Adicione um arquivo ao área de preparação (staging).

Adicionar todos os arquivos ao staging

$ git add .

Enter fullscreen mode Exit fullscreen mode

Stage todos os arquivos modificados.

Commitar arquivos stageados

$ git commit -m "commit message"

Enter fullscreen mode Exit fullscreen mode

Commitar todos os arquivos stageados.

Adicionar mudanças a arquivos já rastreados e fazer commit

$ git commit -am "commit message"

Enter fullscreen mode Exit fullscreen mode

Adicione todas as alterações feitas em arquivos rastreados e faça um commit.


Conceitos Básicos

  • main: branch de desenvolvimento padrão
  • origin: repositório upstream padrão
  • HEAD: branch atual
  • HEAD^: pai do HEAD
  • HEAD~4: quatro gerações acima do HEAD
  • grandparent of HEAD: avô do HEAD

Branches

Listar branches locais

$ git branch

Enter fullscreen mode Exit fullscreen mode

Liste todos os branches locais. Use -r para listar branches remotos, -a para mostrar ambos.

Criar um novo branch

$ git branch <new-branch>

Enter fullscreen mode Exit fullscreen mode

Crie um novo branch.

Mudar para um branch e atualizar o diretório

$ git checkout <branch>

Enter fullscreen mode Exit fullscreen mode

Mude para um branch e atualize o diretório de trabalho.

Criar e mudar para um novo branch

$ git checkout -b <new-branch>

Enter fullscreen mode Exit fullscreen mode

Crie um novo branch e mude para ele.

Deletar um branch mesclado

$ git branch -d <branch>

Enter fullscreen mode Exit fullscreen mode

Delete um branch que já foi mesclado.

Deletar um branch (mesclado ou não)

$ git branch -D <branch>

Enter fullscreen mode Exit fullscreen mode

Delete um branch, independentemente de estar mesclado ou não.

Adicionar uma tag ao commit atual

$ git tag <tag-name>

Enter fullscreen mode Exit fullscreen mode

Adicione uma tag ao commit atual (frequentemente usado para versões de lançamento).


Merging - Mesclando

Mesclar branch a em b

$ git checkout b
$ git merge a

Enter fullscreen mode Exit fullscreen mode

Mesclar o branch a no branch b. Adicione --no-ff para evitar merge fast-forward.

A opção --no-ff (no fast-forward) é usada durante o merge para evitar o merge fast-forward. Vou explicar melhor:

O que é um merge fast-forward?

Quando você faz um merge normal e o branch atual (destino) não tem commits novos desde que o branch sendo mesclado (origem) foi criado, o Git simplesmente move o ponteiro do branch atual para frente, até o último commit do branch de origem. Isso é chamado de "fast-forward" porque não cria um novo commit de merge.

Por que usar --no-ff?

Ao usar a opção --no-ff, você força o Git a criar um commit de merge mesmo quando um merge fast-forward seria possível. Isso tem algumas vantagens:

  • Preserva o histórico de existência do branch de feature, criando um registro explícito de que um merge aconteceu
  • Mantém todos os commits relacionados à feature agrupados visualmente em ferramentas gráficas como gitk ou no comando git log --graph
  • Facilita a reversão de todas as mudanças da feature de uma vez só (com um único revert)

Sem o --no-ff, o histórico fica linear e perde-se a informação visual de que aqueles commits pertenciam a um branch separado.

Exemplo visual:

Com fast-forward (padrão):

A---B---C---D (main)

Com --no-ff:

A---B---C---D---E (main)

\ /

D'

No segundo caso, você mantém um registro claro de que houve um merge e que D' pertencia a um branch separado.

Mesclar e esmagar todos os commits em um único novo commit

$ git merge --squash a

Enter fullscreen mode Exit fullscreen mode

Mesclar e esmagar todos os commits em um único novo commit.


Rebasing

Rebase um branch em main

$ git checkout feature
$ git rebase main

Enter fullscreen mode Exit fullscreen mode

Rebase o branch feature sobre main para incorporar as novas alterações feitas em main. Evita merges desnecessários, mantendo o histórico limpo.

Rebase interativo dos últimos 3 commits

$ git rebase -i HEAD~3

Enter fullscreen mode Exit fullscreen mode

Rebase interativo dos últimos 3 commits no branch atual.


Desfazendo coisas

Mover/renomear um arquivo e stage

$ git mv <existing_path> <new_path>

Enter fullscreen mode Exit fullscreen mode

Move (ou renomeia) um arquivo e o adiciona ao staging.

Remover um arquivo do diretório de trabalho e staging

$ git rm <file>

Enter fullscreen mode Exit fullscreen mode

Remove um arquivo do diretório de trabalho e área de staging, então stage a remoção.

Remover apenas do staging

$ git rm --cached <file>

Enter fullscreen mode Exit fullscreen mode

Remove apenas do área de staging.

Ver um commit anterior (leitura apenas)

$ git checkout <commit_ID>

Enter fullscreen mode Exit fullscreen mode

Visualize um commit anterior (modo de leitura).

Criar um novo commit revertendo mudanças

$ git revert <commit_ID>

Enter fullscreen mode Exit fullscreen mode

Crie um novo commit que reverte as mudanças de um commit específico.

Voltar a um commit anterior e deletar commits posteriores

$ git reset <commit_ID>

Enter fullscreen mode Exit fullscreen mode

Volte a um commit anterior e delete todos os commits após ele (revert é mais seguro). Use --hard para apagar mudanças no workspace (SEJA MUITO CUIDADOSO!).


Revise seu repositório

Listar arquivos novos ou modificados ainda não commitados

$ git status

Enter fullscreen mode Exit fullscreen mode

Liste arquivos novos ou modificados que ainda não foram commitados.

Mostrar histórico de commits com IDs

$ git log --oneline

Enter fullscreen mode Exit fullscreen mode

Mostre o histórico de commits com respectivos IDs.

Mostrar alterações em arquivos não stageados

$ git diff

Enter fullscreen mode Exit fullscreen mode

Mostre as alterações em arquivos não stageados. Para arquivos stageados, use --cached.

Mostrar diferenças entre dois commits

$ git diff commit1_ID commit2_ID

Enter fullscreen mode Exit fullscreen mode

Mostre as diferenças entre dois commits.


Stashing

Armazenar mudanças modificadas e stageadas

$ git stash

Enter fullscreen mode Exit fullscreen mode

Armazene mudanças modificadas e stageadas. Use -u para incluir arquivos não rastreados. Use -a para arquivos não rastreados e ignorados.

Armazenar com comentário

$ git stash save "comment"

Enter fullscreen mode Exit fullscreen mode

Como acima, mas adicione um comentário.

Armazenar parcialmente (um arquivo ou parte de um)

$ git stash -p

Enter fullscreen mode Exit fullscreen mode

Armazene parcialmente: apenas um arquivo, coleção de arquivos ou mudanças individuais dentro de arquivos.

Listar todos os stashes

$ git stash list

Enter fullscreen mode Exit fullscreen mode

Liste todos os stashes.

Re-aplicar o stash sem excluí-lo

$ git stash apply

Enter fullscreen mode Exit fullscreen mode

Reaplique o stash sem excluí-lo.

Re-aplicar o stash em índice 2 e excluí-lo

$ git stash pop stash@{2}

Enter fullscreen mode Exit fullscreen mode

Reaplique o stash no índice 2, então exclua-o do stash. Use stash@{n} para pular o último stash.

Mostrar resumo das diferenças do stash 1

$ git stash show stash@{1}

Enter fullscreen mode Exit fullscreen mode

Mostre o resumo das diferenças do stash 1. Use -p para ver a diferença completa.


Sincronizando

Adicionar um repositório remoto

$ git remote add <alias> <url>

Enter fullscreen mode Exit fullscreen mode

Adicione um repositório remoto.

Ver conexões remotas

$ git remote

Enter fullscreen mode Exit fullscreen mode

Liste todas as conexões remotas. Use -v para ver URLs.

Remover uma conexão remota

$ git remote remove <alias>

Enter fullscreen mode Exit fullscreen mode

Remova uma conexão remota.

Renomear uma conexão remota

$ git remote rename <old> <new>

Enter fullscreen mode Exit fullscreen mode

Renomeie uma conexão remota.

Buscar todos os branches do repositório remoto

$ git fetch <alias>

Enter fullscreen mode Exit fullscreen mode

Busque todos os branches do repositório remoto (sem merge).

Buscar um branch específico

$ git fetch <alias> <branch>

Enter fullscreen mode Exit fullscreen mode

Busque um branch específico.

Buscar cópia do repositório remoto

$ git pull

Enter fullscreen mode Exit fullscreen mode

Busque a cópia do repositório remoto, então faça merge.

Atualizar com rebase (histórico limpo)

$ git pull --rebase <alias>

Enter fullscreen mode Exit fullscreen mode

Faça um rebase das suas mudanças locais sobre as novas mudanças feitas no repositório remoto (para histórico limpo e linear).

Enviar conteúdo local para repositório remoto

$ git push <alias>

Enter fullscreen mode Exit fullscreen mode

Envie o conteúdo local para o repositório remoto.

Enviar para um branch específico

$ git push <alias> <branch>

Enter fullscreen mode Exit fullscreen mode

Envie para um branch específico (depois pode fazer pull novamente).


Este cheat sheet foi criado para ajudar desenvolvedores a lembrarem rapidamente dos comandos essenciais do Git.

Top comments (0)