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

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

  • #GitHub
  • #Git

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.