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 pelaURL
, sem baixar as outras branches.
Criando um Novo Repositório na Linha de Comando
- Crie um arquivo README:
echo "# meu-projeto" >> README.md
- Descrição: Cria um novo arquivo
README.md
e adiciona a linha# meu-projeto
nele.
- Inicialize o repositório:
git init
- Descrição: Inicializa um novo repositório Git vazio no diretório atual.
- 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).
- 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.
- Renomeie a branch principal para "main":
git branch -M main
- Descrição: Renomeia a branch atual para
main
.
- 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.
- 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 remotoorigin
e definemain
como a branch upstream padrão.
Enviando um Repositório Existente para um Repositório Remoto
- 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.
- Renomeie a branch principal para "main":
git branch -M main
- Descrição: Renomeia a branch atual para
main
.
- 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 remotoorigin
e definemain
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 pelaURL
, 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 remotoorigin
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 branchmain
do repositório remotoorigin
.
Mesclando Alterações da Branch Remota
git merge origin/main
- Descrição: Mescla as mudanças da branch
main
do repositório remotoorigin
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.