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 <directory>
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>
Baixe um repositório remoto.
Adicionando as mudanças
Adicionar um arquivo ao staging
$ git add <file>
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 <new-branch>
Crie um novo branch.
Mudar para um branch e atualizar o diretório
$ git checkout <branch>
Mude para um branch e atualize o diretório de trabalho.
Criar e mudar para um novo branch
$ git checkout -b <new-branch>
Crie um novo branch e mude para ele.
Deletar um branch mesclado
$ git branch -d <branch>
Delete um branch que já foi mesclado.
Deletar um branch (mesclado ou não)
$ git branch -D <branch>
Delete um branch, independentemente de estar mesclado ou não.
Adicionar uma tag ao commit atual
$ git tag <tag-name>
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 <existing_path> <new_path>
Move (ou renomeia) um arquivo e o adiciona ao staging.
Remover um arquivo do diretório de trabalho e staging
$ git rm <file>
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>
Remove apenas do área de staging.
Ver um commit anterior (leitura apenas)
$ git checkout <commit_ID>
Visualize um commit anterior (modo de leitura).
Criar um novo commit revertendo mudanças
$ git revert <commit_ID>
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>
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> <url>
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 <old> <new>
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> <branch>
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> <branch>
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)