Configuração Inicial
Configurar um nome e email
$ git config --global user.name "Danny Adams"
$ git config --global user.email "my-email@gmail.com"
Configure o nome e email que serão anexados aos seus commits e tags.
Iniciando um projeto
Criar um repositório local
$ git init
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
Baixe um repositório remoto.
Adicionando as mudanças
Adicionar um arquivo ao staging
$ git add
Adicione um arquivo ao área de preparação (staging).
Adicionar todos os arquivos ao staging
$ git add .
Stage todos os arquivos modificados.
Commitar arquivos stageados
$ git commit -m "commit message"
Commitar todos os arquivos stageados.
Adicionar mudanças a arquivos já rastreados e fazer commit
$ git commit -am "commit message"
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
Liste todos os branches locais. Use -r para listar branches remotos, -a para mostrar ambos.
Criar um novo branch
$ git branch
Crie um novo branch.
Mudar para um branch e atualizar o diretório
$ git checkout
Mude para um branch e atualize o diretório de trabalho.
Criar e mudar para um novo branch
$ git checkout -b
Crie um novo branch e mude para ele.
Deletar um branch mesclado
$ git branch -d
Delete um branch que já foi mesclado.
Deletar um branch (mesclado ou não)
$ git branch -D
Delete um branch, independentemente de estar mesclado ou não.
Adicionar uma tag ao commit atual
$ git tag
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
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
Mesclar e esmagar todos os commits em um único novo commit.
Rebasing
Rebase um branch em main
$ git checkout feature
$ git rebase main
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
Rebase interativo dos últimos 3 commits no branch atual.
Desfazendo coisas
Mover/renomear um arquivo e stage
$ git mv
Move (ou renomeia) um arquivo e o adiciona ao staging.
Remover um arquivo do diretório de trabalho e staging
$ git rm
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
Remove apenas do área de staging.
Ver um commit anterior (leitura apenas)
$ git checkout
Visualize um commit anterior (modo de leitura).
Criar um novo commit revertendo mudanças
$ git revert
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
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
Liste arquivos novos ou modificados que ainda não foram commitados.
Mostrar histórico de commits com IDs
$ git log --oneline
Mostre o histórico de commits com respectivos IDs.
Mostrar alterações em arquivos não stageados
$ git diff
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
Mostre as diferenças entre dois commits.
Stashing
Armazenar mudanças modificadas e stageadas
$ git stash
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"
Como acima, mas adicione um comentário.
Armazenar parcialmente (um arquivo ou parte de um)
$ git stash -p
Armazene parcialmente: apenas um arquivo, coleção de arquivos ou mudanças individuais dentro de arquivos.
Listar todos os stashes
$ git stash list
Liste todos os stashes.
Re-aplicar o stash sem excluí-lo
$ git stash apply
Reaplique o stash sem excluí-lo.
Re-aplicar o stash em índice 2 e excluí-lo
$ git stash pop stash@{2}
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}
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>
Adicione um repositório remoto.
Ver conexões remotas
$ git remote
Liste todas as conexões remotas. Use -v para ver URLs.
Remover uma conexão remota
$ git remote remove <alias>
Remova uma conexão remota.
Renomear uma conexão remota
$ git remote rename
Renomeie uma conexão remota.
Buscar todos os branches do repositório remoto
$ git fetch <alias>
Busque todos os branches do repositório remoto (sem merge).
Buscar um branch específico
$ git fetch <alias>
Busque um branch específico.
Buscar cópia do repositório remoto
$ git pull
Busque a cópia do repositório remoto, então faça merge.
Atualizar com rebase (histórico limpo)
$ git pull --rebase <alias>
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>
Envie o conteúdo local para o repositório remoto.
Enviar para um branch específico
$ git push <alias>
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.