Emanoel Rosa
Emanoel Rosa18/06/2024 02:06
Compartilhe

Versionamento de Código, Git e GitHub: Guia Prático

    Introdução ao Versionamento de Código

    O que é Versionamento de Código?

    O versionamento de código é uma prática essencial no desenvolvimento de software que envolve o controle das diversas versões de um arquivo ao longo do tempo. Utilizando sistemas de controle de versão, é possível registrar e gerenciar o histórico de atualizações de um arquivo, incluindo detalhes sobre as alterações realizadas, datas, autores e muito mais. Esses sistemas proporcionam organização, controle e segurança ao desenvolvimento, permitindo a colaboração eficaz entre desenvolvedores e facilitando a manutenção do código.

    Git: Sistema de Controle de Versão Distribuído

    O que é Git?

    Git é um sistema de controle de versão distribuído gratuito e de código aberto (open source). Ele se destaca pela sua eficiência na criação de ramificações (branching) e fusões (merging), além de ser leve e rápido. Git permite que múltiplos desenvolvedores trabalhem simultaneamente em diferentes partes de um projeto, promovendo uma gestão de código colaborativa e organizada.

    GitHub: Plataforma de Hospedagem e Colaboração

    O que é GitHub?

    GitHub é uma plataforma de hospedagem de código que utiliza o Git para controle de versão e facilita a colaboração entre desenvolvedores. Com uma comunidade ativa e alcance global, GitHub é amplamente utilizado para projetos de todas as escalas. Seu mascote, o "Octocat", tornou-se um ícone reconhecível na cultura do desenvolvimento de software.

    Primeiros Passos com Git e GitHub

    Criando e Clonando Repositórios

    Inicializando um Repositório Local

    git init
    
    • Descrição: Inicializa um novo repositório Git vazio no diretório atual. Cria um subdiretório .git onde todas as informações do repositório serão armazenadas.

    Conectando um Repositório Local a um Repositório Remoto

    git remote add origin URL
    
    • Descrição: Adiciona um novo repositório remoto chamado origin que será a origem das interações com o repositório remoto, como pull, fetch e push.

    Clonando um Repositório

    git clone URL nome-do-diretorio-local
    
    • Descrição: Clona um repositório remoto especificado pela URL para um diretório local com o nome especificado.

    Clonando uma Branch Específica

    git clone URL --branch feature-1 --single-branch
    
    • Descrição: Clona apenas a branch feature-1 de um repositório remoto especificado pela URL, sem baixar as outras branches.

    Criando um Novo Repositório na Linha de Comando

    1. Crie um arquivo README:
    echo "# meu-projeto" >> README.md
    
    • Descrição: Cria um novo arquivo README.md e adiciona a linha # meu-projeto nele.
    1. Inicialize o repositório:
    git init
    
    • Descrição: Inicializa um novo repositório Git vazio no diretório atual.
    1. Adicione o arquivo README à área de preparação:
    git add README.md
    
    • Descrição: Adiciona o arquivo README.md à área de preparação (staging area).
    1. Realize o primeiro commit:
    git commit -m "first commit"
    
    • Descrição: Cria um commit com a mensagem "first commit" contendo as mudanças que estão na área de preparação.
    1. Renomeie a branch principal para "main":
    git branch -M main
    
    • Descrição: Renomeia a branch atual para main.
    1. Adicione o repositório remoto:
    git remote add origin URL.git
    
    • Descrição: Adiciona um novo repositório remoto chamado origin apontando para a URL especificada.
    1. Envie os arquivos para o repositório remoto:
    git push -u origin main
    
    • Descrição: Envia (push) as mudanças da branch main para o repositório remoto origin e define main como a branch upstream padrão.

    Enviando um Repositório Existente para um Repositório Remoto

    1. Adicione o repositório remoto:
    git remote add origin URL.git
    
    • Descrição: Adiciona um novo repositório remoto chamado origin apontando para a URL especificada.
    1. Renomeie a branch principal para "main":
    git branch -M main
    
    • Descrição: Renomeia a branch atual para main.
    1. Envie os arquivos para o repositório remoto:
    git push -u origin main
    
    • Descrição: Envia (push) as mudanças da branch main para o repositório remoto origin e define main como a branch upstream padrão.

    Salvando Alterações no Repositório Local

    Verificando o Status do Projeto

    git status
    
    • Descrição: Mostra o status atual do repositório, incluindo arquivos modificados, adicionados à área de preparação, e não monitorados (untracked).

    Adicionando Arquivos à Área de Preparação

    git add nome-do-arquivo.extensão
    
    • Descrição: Adiciona o arquivo especificado à área de preparação (staging area), tornando-o pronto para o próximo commit.

    Realizando um Commit com Mensagem

    git commit -m "mensagem descritiva"
    
    • Descrição: Cria um commit com as mudanças que estão na área de preparação, utilizando a mensagem especificada para descrever o commit.

    Visualizando o Log dos Commits

    git log
    
    • Descrição: Exibe o histórico de commits do repositório, mostrando detalhes como autor, data e mensagem de cada commit.

    Gerenciando Arquivos com .gitignore

    echo pasta/ > .gitignore
    echo > .gitignore
    touch pasta/.gitkeep
    
    • Descrição: echo pasta/ > .gitignore adiciona a pasta especificada ao arquivo .gitignore, para que seja ignorada nos commits. echo > .gitignore limpa o arquivo .gitignore. touch pasta/.gitkeep cria um arquivo .gitkeep dentro da pasta para garantir que o Git rastreie a pasta vazia.

    Adicionando Todos os Arquivos à Área de Preparação

    git add .
    
    • Descrição: Adiciona todos os arquivos modificados e não monitorados do diretório atual à área de preparação.

    Desfazendo Alterações no Repositório Local

    Removendo o Controle de Versão de um Diretório

    rm -rf .git
    
    • Descrição: Remove o diretório .git, desativando o controle de versão no diretório atual.

    Restaurando um Arquivo Modificado

    git restore nome-do-arquivo
    
    • Descrição: Restaura a versão do arquivo especificado, desfazendo as modificações feitas desde o último commit.

    Corrigindo a Mensagem do Último Commit

    git commit --amend -m "nova mensagem"
    
    • Descrição: Altera a mensagem do último commit, mantendo as mesmas mudanças no commit.

    Reconfigurando a Área de Preparação com um Commit Específico

    git reset --soft hash-do-commit
    git reset --mixed hash-do-commit
    git reset --hard hash-do-commit
    
    • Descrição:
    • --soft: Redefine a cabeça (HEAD) para o commit especificado, mantendo as mudanças na área de preparação.
    • --mixed: Redefine a cabeça para o commit especificado e mantém as mudanças modificadas, removendo-as da área de preparação.
    • --hard: Redefine a cabeça para o commit especificado e descarta todas as mudanças locais.

    Visualizando Logs Detalhados dos Commits

    git reflog
    
    • Descrição: Exibe o histórico de mudanças da cabeça (HEAD), incluindo operações como commits, resets e checkouts.

    Removendo Arquivos da Área de Preparação

    git reset pasta/arquivo.md
    git restore --staged pasta/arquivo2.md
    
    • Descrição:
    • git reset pasta/arquivo.md: Remove o arquivo especificado da área de preparação.
    • git restore --staged pasta/arquivo2.md: Restaura a versão do arquivo na área de preparação para a versão do último commit.

    Enviando e Baixando Alterações com o Repositório Remoto

    Atualizando o Repositório Local com Atualizações Remotas

    git pull
    
    • Descrição: Baixa (fetch) e mescla (merge) as mudanças do repositório remoto com o repositório local.

    Trabalhando com Branches: Criando, Mesclando, Deletando e Tratando Conflitos

    Criando e Gerenciando Branches

    Clonando uma Branch Específica

    git clone URL.git --branch teste --single-branch
    
    • Descrição: Clona apenas a branch teste de um repositório remoto especificado pela URL, sem baixar as outras branches.

    Criando uma Nova Branch

    git checkout -b teste
    
    • Descrição: Cria e alterna para uma nova branch chamada teste, baseada na branch atual.

    Voltando para uma Branch Específica

    git checkout main
    
    • Descrição: Alterna para a branch main.

    Listando o Último Commit de Cada Branch

    git branch -v
    
    • Descrição: Lista todas as branches locais e mostra o último commit de cada uma.

    Mesclando Branches

    git merge nome-da-branch
    
    • Descrição: Mescla a branch especificada com a branch atual.

    Deletando uma Branch

    git branch -d nome-da-branch
    
    • Descrição: Deleta a branch especificada.

    Comandos Úteis no Dia a Dia

    Baixando Alterações do Repositório Remoto sem Mesclar

    git fetch origin main
    
    • Descrição: Baixa as mudanças da branch main do repositório remoto origin sem mesclá-las com a branch local.

    Comparando Conteúdos entre Repositórios Remoto e Local

    git diff main origin/main
    
    • Descrição: Compara as mudanças entre a branch main local e a branch main do repositório remoto origin.

    Mesclando Alterações da Branch Remota

    git merge origin/main
    
    • Descrição: Mescla as mudanças da branch main do repositório remoto origin com a branch atual.

    Arquivando Alterações Não Completas

    git stash
    git stash list
    git stash pop
    git stash apply
    
    • Descrição:
    • git stash: Armazena as mudanças atuais não comprometidas para um espaço temporário (stash) e limpa a área de trabalho.
    • git stash list: Lista todas as mudanças armazenadas no stash.
    • git stash pop: Aplica a mudança mais recente do stash e remove-a da lista de stash.
    • git stash apply: Aplica uma mudança do stash, mas mantém-na na lista de stash.

    Este guia fornece uma introdução abrangente ao versionamento de código utilizando Git e GitHub, incluindo comandos e práticas essenciais para iniciar e gerenciar seus projetos de forma eficaz. Aprofundar-se nesses conceitos e práticas permitirá que você colabore de maneira mais eficiente e mantenha um controle rigoroso sobre o desenvolvimento do seu software.

    Compartilhe
    Comentários (1)
    Luísa Teixeira
    Luísa Teixeira - 18/06/2024 06:23

    Nossa muito legal seu artigo, realmente ajuda muito pra quem está iniciando a trabalhar com git.