{"id":21744928,"url":"https://github.com/scaique/versionamentodecodigogit","last_synced_at":"2026-05-09T15:41:42.060Z","repository":{"id":238905872,"uuid":"797927785","full_name":"scaique/VersionamentoDeCodigoGit","owner":"scaique","description":"Este guia foi criado para servir como uma referência rápida aos comandos essenciais do Git, abrangendo desde a configuração inicial e gerenciamento de repositórios até tarefas como commits, histórico de versões, ramificações, mesclagens e colaboração em equipe.","archived":false,"fork":false,"pushed_at":"2025-12-11T04:28:21.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-11T22:18:20.823Z","etag":null,"topics":["bash","git","github","vitrinedev"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scaique.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-08T18:48:28.000Z","updated_at":"2025-12-11T04:28:24.000Z","dependencies_parsed_at":"2024-05-08T20:11:48.209Z","dependency_job_id":null,"html_url":"https://github.com/scaique/VersionamentoDeCodigoGit","commit_stats":null,"previous_names":["bluee-bluue/versionamentodecodigogit","scaique/versionamentodecodigogit"],"tags_count":0,"template":false,"template_full_name":"alura/modelo-vitrinedev","purl":"pkg:github/scaique/VersionamentoDeCodigoGit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaique%2FVersionamentoDeCodigoGit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaique%2FVersionamentoDeCodigoGit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaique%2FVersionamentoDeCodigoGit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaique%2FVersionamentoDeCodigoGit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scaique","download_url":"https://codeload.github.com/scaique/VersionamentoDeCodigoGit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaique%2FVersionamentoDeCodigoGit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32824990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","git","github","vitrinedev"],"created_at":"2024-11-26T07:13:07.795Z","updated_at":"2026-05-09T15:41:42.054Z","avatar_url":"https://github.com/scaique.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Guia Completo de Git e GitHub\n\n\u003e Uma referência completa e prática para dominar o versionamento de código com Git\n\n![Git \u0026 GitHub](https://hermes.dio.me/articles/cover/e34ac480-ce44-439a-b28b-1845bd195afe.png#vitrinedev)\n\n## 📋 Índice\n\n| Seção | Descrição | Link |\n|-------|-----------|------|\n| 🔧 | Configuração Inicial | [Ver comandos](#-configuração-inicial) |\n| 🎯 | Comandos Essenciais | [Ver comandos](#-comandos-essenciais) |\n| 🌿 | Branches | [Ver comandos](#-branches) |\n| 🔄 | Sincronização | [Ver comandos](#-sincronização) |\n| 🏷️ | Tags e Releases | [Ver comandos](#️-tags-e-releases) |\n| 🔀 | Merge e Rebase | [Ver comandos](#-merge-e-rebase) |\n| 🎯 | Múltiplos Remotos | [Ver comandos](#-múltiplos-repositórios-remotos) |\n| 🆘 | Solução de Problemas | [Ver comandos](#-solução-de-problemas) |\n\n---\n\n## 🔧 Configuração Inicial\n\n### Configurações Globais\n```bash\n# Configurações básicas do usuário\ngit config --global user.name \"Seu Nome\"\ngit config --global user.email \"seu.email@exemplo.com\"\n\n# Configurações úteis\ngit config --global init.defaultBranch main              # Define branch padrão como 'main'\ngit config --global core.editor \"code --wait\"            # Define VS Code como editor padrão\ngit config --global color.ui auto                        # Habilita cores no terminal\ngit config --global core.autocrlf true                   # Corrige problemas de quebra de linha (Windows)\ngit config --global core.longpaths true                  # Permite caminhos longos (Windows)\ngit config --global pull.rebase false                    # Define merge como padrão no pull\n\n# Verificar configurações\ngit config --list                                        # Lista todas as configurações\ngit config user.name                                     # Verifica uma configuração específica\n```\n\n### Aliases Úteis (Atalhos)\n```bash\n# Criar atalhos para comandos frequentes\ngit config --global alias.st status\ngit config --global alias.co checkout\ngit config --global alias.br branch\ngit config --global alias.cm commit\n```\n\n---\n\n## 🎯 Comandos Essenciais\n\n### Inicializando um Repositório\n```bash\n# Criar novo repositório\ngit init                                          # Inicializa repositório local\ngit init {nome-da-pasta}                          # Cria pasta e inicializa repositório\n\n# Clonar repositório existente\ngit clone {url-do-repositório}                    # Clona repositório completo\ngit clone {url} {nome-pasta}                      # Clona com nome personalizado\ngit clone --depth 1 {url}                         # Clona apenas último commit (shallow clone)\ngit clone -b {branch} --single-branch {url}       # Clona apenas uma branch específica\n```\n\n### Trabalhando com Arquivos\n```bash\n# Adicionar arquivos\ngit add {arquivo}                                 # Adiciona arquivo específico\ngit add .                                         # Adiciona todos os arquivos modificados\ngit add *.{extensão}                              # Adiciona arquivos por extensão\ngit add -p                                        # Adiciona mudanças interativamente\n\n# Remover arquivos\ngit rm {arquivo}                                  # Remove arquivo do repositório e do disco\ngit rm --cached {arquivo}                         # Remove apenas do repositório (mantém no disco)\ngit rm -r --cached {pasta}                        # Remove pasta do repositório\n\n# Mover/Renomear arquivos\ngit mv {arquivo-antigo} {arquivo-novo}            # Renomeia ou move arquivo\n```\n\n### Commits\n```bash\n# Criar commits\ngit commit -m \"Mensagem do commit\"                # Commit com mensagem\ngit commit -am \"Mensagem\"                         # Add + Commit (apenas arquivos rastreados)\ngit commit --amend -m \"Nova mensagem\"             # Altera último commit\ngit commit --amend --no-edit                      # Adiciona mudanças ao último commit\n\n# Desfazer commits\ngit reset HEAD~1                                  # Desfaz último commit (mantém mudanças)\ngit reset --soft HEAD~1                           # Desfaz commit (mantém mudanças staged)\ngit reset --hard HEAD~1                           # Desfaz commit (descarta mudanças)\ngit revert {hash-commit}                          # Cria novo commit revertendo mudanças\n```\n\n### Arquivo .gitignore\n```bash\n# Criar arquivo .gitignore\ntouch .gitignore                                  # Cria arquivo (Linux/Mac/Git Bash)\necho \u003e .gitignore                                 # Cria arquivo\necho \"Arquivo/Pasta\" \u003e\u003e .gitignore                # Cria o arquivo com texto\n\n# Padrões comuns do .gitignore\n*.log                                             # Ignora todos os arquivos .log\n/node_modules                                     # Ignora pasta node_modules na raiz\n**/.env                                           # Ignora .env em qualquer pasta\n!importante.log                                   # Não ignora arquivo específico\ntemp/                                             # Ignora pasta temp\n*.{jpg,png,gif}                                   # Ignora múltiplas extensões\n\n# Ignorar arquivo já rastreado\ngit rm --cached {arquivo}                         # Remove do rastreamento\ngit add .gitignore                                # Adiciona regra ao .gitignore\ngit commit -m \"Ignorando arquivo\"                 # Confirma mudanças\n```\n\n---\n\n## 🌿 Branches\n\n### Gerenciamento de Branches\n```bash\n# Listar branches\ngit branch                                        # Lista branches locais\ngit branch -r                                     # Lista branches remotas\ngit branch -a                                     # Lista todas as branches\ngit branch -v                                     # Lista branches com último commit\ngit branch --merged                               # Lista branches já mergeadas\ngit branch --no-merged                            # Lista branches não mergeadas\n\n# Criar e alternar branches\ngit branch {nome-branch}                          # Cria nova branch\ngit checkout {nome-branch}                        # Alterna para branch\ngit checkout -b {nome-branch}                     # Cria e alterna para nova branch\ngit switch {nome-branch}                          # Alterna branch (Git 2.23+)\ngit switch -c {nome-branch}                       # Cria e alterna (Git 2.23+)\n\n# Renomear e deletar branches\ngit branch -m {novo-nome}                         # Renomeia branch atual\ngit branch -m {nome-antigo} {nome-novo}           # Renomeia branch específica\ngit branch -d {nome-branch}                       # Deleta branch (safe)\ngit branch -D {nome-branch}                       # Força deleção de branch\ngit push origin --delete {nome-branch}            # Deleta branch remota\n```\n\n### Comparando Branches\n```bash\ngit diff {branch1} {branch2}                      # Compara duas branches\ngit diff {branch1}...{branch2}                    # Compara desde o ancestral comum\ngit log {branch1}..{branch2}                      # Commits em branch2 que não estão em branch1\ngit show-branch {branch1} {branch2}               # Visualiza histórico das branches\n```\n\n---\n\n## 🔄 Sincronização\n\n### Trabalhando com Remotos\n```bash\n# Gerenciar remotos\ngit remote -v                                     # Lista remotos configurados\ngit remote add origin {url}                       # Adiciona remoto principal\ngit remote add {nome} {url}                       # Adiciona remoto adicional\ngit remote rename {nome-antigo} {nome-novo}       # Renomeia remoto\ngit remote remove {nome}                          # Remove remoto\ngit remote set-url origin {nova-url}              # Altera URL do remoto\ngit remote show origin                            # Mostra informações do remoto\n\n# Push (Enviar mudanças)\ngit push origin {branch}                          # Envia branch para remoto\ngit push -u origin {branch}                       # Envia e configura upstream\ngit push --all origin                             # Envia todas as branches\ngit push --tags                                   # Envia todas as tags\ngit push --force                                  # Força envio (CUIDADO!)\ngit push --force-with-lease                       # Força envio seguro\n\n# Pull e Fetch (Receber mudanças)\ngit fetch                                         # Baixa mudanças sem aplicar\ngit fetch --all                                   # Baixa de todos os remotos\ngit fetch --prune                                 # Remove referências obsoletas\ngit pull                                          # Baixa e aplica mudanças\ngit pull --rebase                                 # Pull com rebase ao invés de merge\ngit pull origin {branch}                          # Pull de branch específica\n```\n\n---\n\n## 🏷️ Tags e Releases\n\n### Trabalhando com Tags\n```bash\n# Listar e visualizar tags\ngit tag                                           # Lista todas as tags\ngit tag -l \"v1.8*\"                                # Lista tags com padrão\ngit show {nome-tag}                               # Mostra informações da tag\n\n# Criar tags\ngit tag {nome-tag}                                # Cria tag leve\ngit tag -a {nome-tag} -m \"Mensagem\"               # Cria tag anotada\ngit tag -a {nome-tag} {hash-commit}               # Tag em commit específico\ngit tag -s {nome-tag} -m \"Mensagem\"               # Tag assinada com GPG\n\n# Gerenciar tags\ngit tag -d {nome-tag}                             # Deleta tag local\ngit push origin --delete {nome-tag}               # Deleta tag remota\ngit push origin {nome-tag}                        # Envia tag específica\ngit push --tags                                   # Envia todas as tags\ngit checkout {nome-tag}                           # Navega para tag\n```\n\n---\n\n## 🔀 Merge e Rebase\n\n### Merge\n```bash\n# Merge básico\ngit merge {branch}                                # Merge de branch\ngit merge --no-ff {branch}                        # Força criação de commit de merge\ngit merge --ff-only {branch}                      # Apenas fast-forward\ngit merge --abort                                 # Cancela merge em andamento\n\n# Resolver conflitos\ngit status                                        # Verifica arquivos em conflito\ngit diff                                          # Visualiza conflitos\ngit add {arquivo-resolvido}                       # Marca como resolvido\ngit merge --continue                              # Continua após resolver conflitos\n```\n\n### Rebase\n```bash\n# Rebase básico\ngit rebase {branch}                               # Rebase em cima de branch\ngit rebase -i HEAD~3                              # Rebase interativo dos últimos 3 commits\ngit rebase --onto {nova-base} {antiga-base}       # Rebase avançado\ngit rebase --abort                                # Cancela rebase\ngit rebase --continue                             # Continua após resolver conflitos\ngit rebase --skip                                 # Pula commit problemático\n\n# Comandos no rebase interativo\n# pick = usar commit\n# reword = usar commit, mas editar mensagem\n# edit = usar commit, mas parar para alterações\n# squash = usar commit, mas juntar com anterior\n# fixup = como squash, mas descarta mensagem\n# drop = remove commit\n```\n\n---\n\n## 🎯 Múltiplos Repositórios Remotos\n\n### Caso de Uso: Repositório Público e Privado\n\nImagine que você tem um projeto onde parte do código é pública e parte é privada. Você quer manter um repositório privado com TUDO e um público apenas com o código que pode ser compartilhado.\n\n#### Configuração Completa Passo a Passo\n```bash\n# 1. CRIAR O PROJETO E CONFIGURAR REMOTOS\nmkdir meu-projeto \u0026\u0026 cd meu-projeto\ngit init\n\n# Adicionar os dois repositórios remotos\ngit remote add privado https://github.com/usuario/repo-privado.git\ngit remote add publico https://github.com/usuario/repo-publico.git\n\n# Verificar se está tudo certo\ngit remote -v\n# Deve mostrar:\n# privado  https://github.com/usuario/repo-privado.git (fetch)\n# privado  https://github.com/usuario/repo-privado.git (push)\n# publico  https://github.com/usuario/repo-publico.git (fetch)\n# publico  https://github.com/usuario/repo-publico.git (push)\n\n# 2. CRIAR OS ARQUIVOS DO PROJETO\necho \"Código público\" \u003e arquivo-publico.js\necho \"Código privado com segredos\" \u003e arquivo-privado.js  \necho \"API_KEY=secret123\" \u003e .env\necho \"Documentação pública\" \u003e README.md\n\n# 3. CRIAR BRANCH PRIVADA (com TODOS os arquivos)\ngit add .                                         # Adiciona TODOS os 4 arquivos\ngit commit -m \"Versão completa do projeto\"\ngit branch -M main-privado                        # Renomeia a branch para main-privado\n\n# Neste ponto você tem:\n# Branch: main-privado com 4 arquivos (publico.js, privado.js, .env, README.md)\n\n# 4. CRIAR BRANCH PÚBLICA (removendo arquivos sensíveis)\ngit checkout -b main-publico                      # Cria NOVA branch baseada na privada\ngit rm arquivo-privado.js .env                    # Remove os arquivos sensíveis\ngit commit -m \"Remove arquivos privados\"          # Salva a remoção\n\n# Agora você tem:\n# Branch: main-publico com 2 arquivos (publico.js, README.md)\n\n# 5. ENVIAR CADA BRANCH PARA SEU REPOSITÓRIO\ngit push privado main-privado:main                # Envia branch privada → repo privado\ngit push publico main-publico:main                # Envia branch pública → repo público\n```\n\n#### Automatizando com Alias\n```bash\n# Criar comandos personalizados para facilitar\ngit config --global alias.sync-public '!git checkout main-publico \u0026\u0026 git cherry-pick main-privado \u0026\u0026 git push publico main-publico:main \u0026\u0026 git checkout main-privado'\n\n# Agora você pode sincronizar com um comando só:\ngit sync-public\n```\n\n---\n\n## 🆘 Solução de Problemas\n\n### Desfazer Mudanças\n```bash\n# Desfazer mudanças não commitadas\ngit checkout -- {arquivo}                         # Descarta mudanças em arquivo\ngit checkout .                                    # Descarta todas as mudanças\ngit restore {arquivo}                             # Restaura arquivo (Git 2.23+)\ngit restore --staged {arquivo}                    # Remove do stage\ngit clean -df                                     # Remove arquivos não rastreados\n\n# Recuperar commits perdidos\ngit reflog                                        # Visualiza histórico de referências\ngit checkout {hash-reflog}                        # Recupera commit\ngit reset --hard {hash-reflog}                    # Restaura para estado anterior\n```\n\n### Corrigir Problemas Comuns\n```bash\n# Corrigir último commit\ngit commit --amend                                # Abre editor para alterar\ngit commit --amend --no-edit                      # Adiciona mudanças sem editar mensagem\ngit commit --amend --author=\"Nome \u003cemail\u003e\"        # Altera autor\n```\n\n---\n\n## 🔐 Segurança\n\n### Assinatura de Commits com GPG\n```bash\n# Configurar GPG\ngit config --global user.signingkey {key-id}\ngit config --global commit.gpgsign true           # Assina todos os commits\ngit config --global tag.gpgsign true              # Assina todas as tags\n\n# Verificar assinaturas\ngit log --show-signature                          # Mostra assinaturas\ngit verify-commit {hash}                          # Verifica commit\ngit verify-tag {tag}                              # Verifica tag\n```\n\n### Proteção de Dados Sensíveis\n```bash\n# Verificar se há segredos no histórico\ngit secrets --scan-history\n\n# Usar git-crypt para criptografar arquivos\ngit-crypt init\ngit-crypt add-gpg-user {user-id}\n\n# Configurar pre-commit hooks\ncat \u003e .git/hooks/pre-commit \u003c\u003c 'EOF'\n#!/bin/bash\n# Verifica por palavras-chave sensíveis\nif git diff --cached | grep -E \"(password|api_key|secret|token)\" ; then\n    echo \"ERRO: Possível dado sensível detectado!\"\n    exit 1\nfi\nEOF\nchmod +x .git/hooks/pre-commit\n```\n\n---\n\n## 📚 Recursos Adicionais\n\n### Documentação Oficial\n- 📖 [Git Documentation](https://git-scm.com/doc)\n- 🐙 [GitHub Docs](https://docs.github.com/)\n- 📘 [Pro Git Book](https://git-scm.com/book/en/v2)\n- 🎓 [Git Tutorial - Atlassian](https://www.atlassian.com/git/tutorials)\n\n---\n\n## 🎯 Comandos Mais Usados - Quick Reference\n\n```bash\n# Top 10 comandos diários\ngit status                                        # Verifica estado\ngit add .                                         # Adiciona mudanças\ngit commit -m \"msg\"                               # Cria commit\ngit push                                          # Envia mudanças\ngit pull                                          # Recebe mudanças\ngit checkout -b feature                           # Nova branch\ngit merge feature                                 # Merge branch\ngit log --oneline                                 # Ver histórico\ngit stash                                         # Guardar mudanças\ngit diff                                          # Ver diferenças\n```\n\n---\n\n## 🤝 Contribuindo\n\nEncontrou um erro ou tem uma sugestão? Sinta-se à vontade para:\n1. Abrir uma [issue](https://github.com/scaique/VersionamentoDeCodigoGit/issues)\n2. Fazer um fork e enviar um Pull Request\n3. Entrar em contato: [scaique.dev.br](https://scaique.dev.br)\n\n---\n\n## ⭐ Apoie este Projeto\n\nSe este guia foi útil para você:\n- ⭐ Dê uma estrela no [GitHub](https://github.com/scaique/VersionamentoDeCodigoGit)\n- 🔗 Compartilhe com seus colegas\n- 📢 Siga no GitHub para mais conteúdo\n\n---\n\n**Última atualização**: Dezembro 2025  \n**Mantido por**: [Caique](https://github.com/scaique) | [Portfolio](https://scaique.dev.br)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaique%2Fversionamentodecodigogit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscaique%2Fversionamentodecodigogit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaique%2Fversionamentodecodigogit/lists"}