Cheatsheet Git

Sistema de controle de versão

Git
43 cards encontrados
Categorias:
Versões:

Sem Categoria


43 cards
História Rápida

Git é um sistema de controlo de versões distribuído, usado para acompanhar alterações em código-fonte e colaborar em projetos.

Quem criou:

  • Criado por Linus Torvalds em 2005, o mesmo criador do Linux.

Porquê:

  • Para substituir o sistema BitKeeper, usado no desenvolvimento do Linux, e oferecer controle rápido, seguro e distribuído.

Principais características:

  • Distribuído: cada utilizador tem todo o repositório localmente.
  • Rápido: operações como commit, branch e merge são feitas localmente.
  • Seguro: histórico de alterações protegido por hashes SHA-1.
Clonar um projeto existente
git clone https://github.com/utilizador/repositorio.git

 Copia tudo do remoto para local e cria automaticamente a ligação ao origin. 

Criar um commit com notas
git commit -m "Adicionar validação de email" -m "Descrição mais longa sobre o que foi feito e porquê."

 O primeiro -m é o título.

 O segundo -m fica como corpo .

 O Git lê a primeira linha como o título do commit, que deve ser curto e direto, a regra de ouro: até 50 caracteres quando possível. 

Remover um stash específico
git stash drop stash@{0}

Remove um stash específico da lista de stashes guardados, libertando espaço e mantendo apenas o que ainda é necessário. Útil quando já aplicaste ou não precisas mais daquele conjunto de alterações temporárias.
 O stash@{0}, stash@{1}, etc., são identificadores dos stashes guardados na lista do Git (Usas o git stash list para saber o id)

Criar branch
git branch feature/nome-da-branch

Os branches são como universos paralelos do teu código. O branch principal (geralmente main) é a “linha do tempo oficial”, e tudo o resto são ramificações onde podes trabalhar sem destruir nada. 

As convenções abaixo são usadas por empresas com Gitflow, Trunk-Based, ou variações modernas dessas práticas. A ideia é manter o repositório organizado e previsível. Aqui estão os tipos de Branches e para que servem:

feature/

Para novas funcionalidades. Serve para criar algo que ainda não existe. Costuma nascer a partir de main ou develop. 

bugfix/

Para resolver um bug normal do dia a dia. Não é crítico. 

hotfix/

Para problemas urgentes em produção. Quando algo esta a parar o site/app agora e precisa de ser corrigido rapidamente. 

release/

Para preparar uma versão. Aqui juntas features, revês código, atualizas changelog e preparas para deploy. 

Criar Repositório
git init

 Cria a pasta .git com toda a estrutura interna. Importante: se já existir .git, não uses isto ou partes o repo. 

Criar um commit
git commit -m "Mensagem clara e útil"

 Um commit é um ponto guardado na linha temporal do projeto.
 Boas mensagens poupam horas de debugging: descreve o que foi feito e porquê, não apenas “fix”. 

Dicas para o "vim" -> Desbloquear teclado

 Como desbloquear para escrever texto deves carregar numa destas teclas:

  • i → inserir texto onde o cursor está
  • a → inserir texto a seguir ao cursor
  • o → cria uma linha nova por baixo e começa a escrever

Após desbloquares o vim irás ver:

-- INSERT --

Para bloqueares novamente o texto (entrares no modo normal), basta em qualquer altura clicares em Esc.

Criar e mudar ao mesmo tempo
git checkout -b feature/login

Cria uma nova branch chamada feature/login e muda automaticamente para ela. É uma forma rápida de começar a trabalhar numa nova funcionalidade ou correção sem alterar a branch principal. Combina git branch (criar) e git checkout (mudar) num só passo. 

Rebase (reescrever para ficar linear)
git checkout feature
git rebase main

 “Teletransporta” os teus commits como se tivessem sido feitos depois da main.
 Histórico mais limpo mas perigoso se já estiver no remoto, podendo causar conflitos e perda de trabalho se for usado em branches partilhadas com outros no remoto. 

Ver o estado atual
git status

O comando mais usado no Git. Mostra:

  • ficheiros alterados
  • ficheiros que entram no próximo commit
  • ficheiros não rastreados

Ajuda sempre a perceber “Onde estou e o que mexi?”

Ver histórico completo de commits
git log

Mostra o histórico de commits da branch atual, incluindo IDs, autores, datas e mensagens. Permite ver a sequência de alterações feitas no projeto e pesquisar commits específicos.

Histórico de commits resumido
git log --oneline

Mostra o histórico de commits de forma resumida, exibindo cada commit numa linha com o seu ID abreviado e a mensagem. É útil para ter uma visão rápida e limpa das alterações. 

Ver branches existentes
git branch

Lista todas as branches existentes no repositório e indica em qual estás atualmente. Sem argumentos, mostra só as branches; com um nome, permite criar uma nova branch. É útil para gerir diferentes linhas de desenvolvimento e organizar funcionalidades ou correções separadamente.

Histórico visual de todas as branches
git log --oneline --graph --all 

Mostra o histórico de commits de forma resumida, incluindo todas as branches (--all) e com um grafo visual (--graph) que representa as ramificações e merges. Permite visualizar rapidamente a estrutura do projeto e como as branches se interligam. 

Ver lista de alterações guardadas temporariamente
git stash list

Mostra todas as alterações que guardaste temporariamente com git stash, listando cada stash com um identificador e a mensagem opcional. Permite ver o que está guardado antes de aplicar ou remover stashes. 

Apagar todos os stashes guardados
git stash clear

Apaga todos os stashes guardados de uma só vez. Serve para limpar rapidamente a lista de alterações temporárias que já não precisas, mantendo o repositório organizado. 

Guardar alterações temporariamente sem commit
git stash

Guarda temporariamente as alterações não commitadas do teu diretório de trabalho e do stage, permitindo voltar a um estado limpo da branch. É útil quando precisas de mudar de branch ou atualizar o repositório sem perder o trabalho em progresso. 

Restaurar e remover alterações guardadas temporariamente
git stash pop

Aplica as alterações guardadas mais recentemente com git stash ao teu diretório de trabalho e remove o stash da lista. É útil quando queres retomar o trabalho guardado e ao mesmo tempo limpar o stash. 

Aplicar alterações guardadas temporariamente
git stash apply

Aplica as alterações guardadas mais recentemente com git stash de volta ao teu diretório de trabalho, sem remover o stash da lista. É útil para retomar trabalho guardado sem perder o registo do stash. 

Resolver conflitos

Quando o Git acusa conflitos, faz:

  1. Abre o ficheiro com conflito.
  2. Procura as marcas do Git:
<<<<<<< HEAD
o teu código
=======
código da outra branch
>>>>>>> nome-da-branch
  1. Escolhe o que quer manter — pode ser só uma parte, misturar, ou reescrever.
  2. Remove as marcas (<<<<<<<, =======, >>>>>>>) e deixa o código final limpinho.
  3. Guarda o ficheiro.
  4. Adiciona e confirma a resolução:
git add .
git commit
Remover ficheiros do stage mantendo alterações
git restore --staged ficheiro 

Remove um ficheiro da staging area, ou seja, desfaz a preparação para commit, mas mantém as alterações feitas no ficheiro no teu diretório de trabalho. Permite corrigir erros sem perder o trabalho já feito. 

Atualizar a branch local com o remoto
 git pull 

Trás as alterações do repositório remoto para a tua branch local e aplica-as automaticamente, atualizando o teu trabalho com o que está no remoto. É uma forma rápida de manter a tua branch sincronizada com o servidor. 

Corrigir o último commit
git commit --amend

 Permite editar a mensagem ou adicionar ficheiros que esqueceste.
 Só usa em commits locais (não enviados). No remoto causa confusão. 

Remover o último commit mantendo alterações
 git reset HEAD~1 

Remove o último commit, mantendo as alterações no diretório de trabalho e no stage. É útil se cometeste algo por engano e queres corrigir o commit sem perder o trabalho já feito, assim as alterações dos ficheiros permanecem no teu diretório de trabalho 

O número depois do ~ pode ser alterado para remover mais commits de uma vez. Por exemplo, HEAD~5 remove os cinco últimos commits, mantendo sempre as alterações no diretório de trabalho. 

Apagar uma branch local de forma segura
git branch -d nome

Apaga uma branch local que já foi mergeada com a branch atual ou outra branch de destino. É uma forma segura de limpar branches que já não são necessárias, evitando perder trabalho que já foi integrado. 

Ver branches locais e remotas existentes
 git branch -a

Mostra todas as branches, locais e remotas, permitindo ver o repositório completo rapidamente. 

Ver repositórios remotos
git remote -v

Mostra os remotes do repositório, ou seja, os endereços dos repositórios remotos ligados ao teu projeto, tanto para fetch (buscar) como push (enviar). É útil para confirmar URLs, ver se estás a usar HTTPS ou SSH, e verificar nomes como origin ou outros remotes configurados. 

Atualizar informações das branches remotas
git fetch

Atualiza as informações do repositório remoto para o teu repositório local sem misturá-las na tua branch atual. Atualiza informações sobre branches remotas e novos commits, permitindo ver mudanças antes de decidir fazer merge ou rebase. É seguro, pois não altera o teu trabalho local. 

Reverter ficheiros para o último commit
git restore ficheiro 

Descarta as alterações feitas no ficheiro no teu diretório de trabalho, revertendo-o para o estado do último commit. É útil quando queres desfazer modificações que ainda não foram adicionadas ao stage. 

Desfazer um commit criando um novo commit
git revert ID_DO_COMMIT 

Este comando cria um novo commit que desfaz as alterações introduzidas pelo commit indicado, sem alterar o histórico anterior. É seguro para usar em branches partilhadas, porque não reescreve commits existentes. 

Dicas para o "vim" -> Comandos de saida

:w — guardar (write)

:q — sair (quit)

:wq — guardar e sair

:q! — sair sem guardar (force quit)

:wq! — guardar e sair mesmo que o ficheiro esteja protegido ou só de leitura

:x — parecido ao :wq, mas só guarda se houve alterações

Atualizar brach mantendo histórico linear
git pull --rebase

Traz as alterações do remoto e aplica os teus commits por cima dessas alterações, sem criar commits de merge. Mantém o histórico mais limpo e linear, mas requer cuidado se os teus commits já tiverem sido enviados para o repositório remoto. 

Enviar alterações remotas
git push origin nome-da-branch

Envia os commits da tua branch local para o repositório remoto chamado origin. Se a branch não existir no remoto, é criada. Este comando sincroniza o teu trabalho local com o servidor, permitindo que outros acedam ou colaborem na mesma branch. 

Git Push com Upstream: ligar a branch local ao remoto
git push -u origin nome-da-branch

Envia a branch para o remoto, como também define a branch upstream. Isso significa que a tua branch local fica ligada à remota, permitindo usar depois apenas git push ou git pull sem especificar origin nem o nome da branch. 

Git Emojis & Prefix - Funcionalidade, Correção & Melhorias

📦 NEW – Adicionar nova funcionalidade ou módulo

Exemplo: 📦 NEW: criar módulo de autenticação com Google

ADD – Adicionar código simples a uma funcionalidade já existente

Exemplo:ADD: adicionar campo “telefone” no formulário de registo

🐛 FIX – Corrigir um erro ou comportamento inesperado

Exemplo: 🐛 FIX: corrigir falha na validação do email

👌 IMPROVE – Melhorar código existente (performance, organização, legibilidade)

Exemplo: 👌 IMPROVE: otimizar o carregamento do dashboard

🚀 RELEASE – Publicar uma nova versão do projecto

Exemplo: 🚀 RELEASE: versão 1.2.0 lançada

Git Emojis & Prefix - Documentação, Estilo, Refatoração & Testes

📝 DOCS – Actualizações de documentação

Exemplo: 📝 DOCS: actualizar README com instruções de instalação

🖌 STYLE – Alterações de estilo, formatação, HTML ou CSS (sem afectar lógica)

Exemplo: 🖌 STYLE: ajustar cores e posição dos botões

🐳 DOCKER – Alterações em configurações, imagens ou scripts Docker

Exemplo: 🐳 DOCKER: actualizar imagem base do container

REFACTOR – Refactorização de código sem mudar comportamento

Exemplo:REFACTOR: dividir função grande em métodos mais pequenos

TEST – Adicionar, melhorar ou actualizar testes automatizados

Exemplo:TEST: adicionar testes unitários para autenticação

Git Emojis & Prefix - Correções & Segurança

PERF – Melhorias de performance ou eficiência

Exemplo:PERF: optimizar query da base de dados

🔒 SECURITY – Correcção de vulnerabilidades ou reforço de segurança

Exemplo: 🔒 SECURITY: prevenir SQL Injection na página de login

🚑 HOTFIX – Correcção urgente de problemas críticos em produção

Exemplo: 🚑 HOTFIX: resolver downtime no sistema de pagamentos

🗑 REMOVE – Remover código, ficheiros ou funcionalidades obsoletas

Exemplo: 🗑 REMOVE: eliminar ficheiros de testes antigos

Adicionar ficheiros ao staging
git add ficheiro
git add .

 O staging é como uma “sala de espera” antes do commit.
 Nunca faças commits às cegas: git status + git add dá-te controlo total no que queres guardar. 

Editar vários commits anteriores (amend interativo real)
git rebase -i HEAD~3

Quando precisamos de corrigir uma mensagem antiga, juntar ficheiros esquecidos, ou reescrever vários commits o HEAD~3 diz ao Git: “quero editar os últimos 3 commits”.


Mudas o número "~X" conforme a quantidade que queres mexer. 


Após gravação precisas de continuar o rebase:

git rebase --continue
Mudar de branch
git checkout nome-da-branch

Serve para  mudares para uma branch especificada no repositório Git. Ele atualiza os ficheiros do teu diretório de trabalho para refletirem o estado dessa branch e ajusta o ponteiro HEAD para apontar para ela. Assim, podes trabalhar em diferentes funcionalidades ou correções isoladamente. 

Merge (junção normal)
git checkout main
git merge bugfix/nome-da-branch

 Cria um novo commit que junta o trabalho.
 Ótimo para equipas porque preserva o histórico como foi feito. 

Ligar repositório local ao GitHub / GitLab / Bitbucket
git remote add origin URL

Adiciona um repositório remoto chamado origin ao teu projeto Git. Serve para ligar o teu repositório local a um remoto, permitindo depois fazer git push ou git fetch para sincronizar alterações com o servidor.