O Git é um sistema de controle de versão distribuído fundamental para o desenvolvimento de software moderno. Ele gerencia o histórico de alterações em um projeto, permitindo colaboração e rastreamento eficientes.
Estrutura de Diretórios do Git
O Git opera com três áreas principais:
- Área de Trabalho (Working Directory): O diretório local onde você edita seus arquivos.
- Área de Preparação (Staging Area): Um espaço intermediário onde você seleciona quais alterações farão parte do próximo commit. Arquivos adicionados aqui ficam em
.git/index. - Repositório (Repository): O banco de dados onde o Git armazena o histórico completo do projeto e seus commits. Localizado na pasta
.git.
Inicialização e Clonagem de Repositórios
Para começar a usar o Git em um projeto, você pode:
-
Inicializar um novo repositório: Crie um novo repositório Git em um diretório existente ou especifique um caminho. Isso gera a pasta oculta
.git. ```bashInicializa um repositório no diretório atual
git init
Inicializa um repositório em um diretório específico
git init /caminho/para/seu/projeto
-
Clonar um repositório existente: Copie um repositório de um servidor remoto para sua máquina local. ```bash
git clone https://servidor.remoto/projeto.git
Gerenciamento de Arquivos
-
git status: Verificando o Estado dos ArquivosMostra o status dos arquivos na área de trabalho e na área de preparação.
# Exibe o status detalhado dos arquivos git status # Exibe um status mais conciso git status -sArquivos não rastreados podem ser ignorados globalmente adicionando seus padrões ao arquivo
.gitignore. -
git diff: Comparando AlteraçõesCompara as diferenças entre diferentes estados do seu repositório.
# Compara a área de trabalho com a área de preparação git diff # Compara a área de preparação com o último commit git diff --staged -
git commit: Salvando Alterações no RepositórioRegistra as alterações preparadas na área de staging para o histórico do repositório.
# Abre um editor para escrever a mensagem do commit git commit # Realiza o commit com uma mensagem em linha git commit -m "Mensagem descritiva do commit" # Adiciona e comita arquivos modificados em uma única etapa (arquivos novos ainda precisam de `git add`) git commit -a -m "Commit rápido para alterações modificadas"Após um commit, o Git informa qual branch foi atualizado e quais arquivos foram alterados.
-
git commit --amend: Modificando o Último CommitPermite alterar o commit mais recente. Útil para corrigir a mensagem do commit ou adicionar arquivos que foram esquecidos, sem criar um novo registro de commit.
git commit --amend -
git reset HEAD: Desfazendo o Preparo de ArquivosRemove arquivos da área de staging, movendo-os de volta para a área de trabalho (sem perder as modificações).
# Desfaz o preparo de um arquivo específico git reset HEAD nome_do_arquivo -
git checkout --: Descartando Alterações na Área de TrabalhoDescarta todas as modificações feitas em um arquivo específico desde o último commit, restaurando-o para o estado do commit mais recente.
# Descarta as alterações no arquivo especificado git checkout -- nome_do_arquivo
Interagindo com Repositórios Remotos
-
Visualizando Repositórios Remotos
Lista os repositórios remotos configurados para o projeto local.
# Lista os nomes dos repositórios remotos git remote # Lista os nomes e URLs dos repositórios remotos git remote -vVocê pode adicionar múltiplos remotos para diferentes fontes de código.
# Adiciona um novo repositório remoto com o alias 'novo_remoto' git remote add novo_remoto https://github.com/usuario/outro-projeto.git -
git fetch: Baixando Dados RemotosBaixa objetos e referênccias de um repositório remoto, mas não mescla automaticamente as alterações no seu branch atual.
# Baixa todas as atualizações do repositório 'origem' git fetch origem -
git pull: Baixando e Mesclando Dados RemotosÉ uma combinação de
git fetchseguido porgit merge. Ele baixa as atualizações do repositório remoto e tenta mesclá-las automaticamente no seu branch local atual.# Baixa e mescla as atualizações do branch padrão do repositório 'origem' git pull origem -
git push: Enviando Alterações para o Repositório RemotoEnvia seus commits locais para um repositório remoto.
# Envia os commits do branch local 'master' para o remoto 'origem' git push origem master -
git remote show: Detalhes de um Repositório RemotoExibe informações detalhadas sobre um repositório remoto específico, incluindo URLs de fetch/push e branches rastreados.
git remote show origem -
Gerenciando Remotos
Permite renomear ou remover repositórios remotos configurados.
# Renomeia um repositório remoto de 'antigo_nome' para 'novo_nome' git remote rename antigo_nome novo_nome # Remove um repositório remoto git remote remove nome_do_remoto
Gerenciamento de Branches
Branches no Git são caminhos independentes de desenvolvimento. O branch master (ou main) não possui um status especial por padrão.
-
Visualizando Branches
# Lista todos os branches locais git branch # Lista branches locais que já foram mesclados no branch atual git branch --merged # Lista branches locais que ainda contêm trabalho não mesclado git branch --no-merged # Mostra o último commit de cada branch local git branch -v -
Criando e Trocando de Branch
# Cria um novo branch chamado 'novo_branch' git branch novo_branch # Muda para o branch 'outro_branch' git checkout outro_branch # Cria um novo branch e muda para ele imediatamente git checkout -b novo_branch_e_checkout -
Visualizando Histórico com Ramificações
Exibe o histórico de commits de forma gráfica, mostrando as ramificações.
git log --oneline --decorate --graph --all -
Mesclando Branches
Combina o histórico de um branch em outro. É recomendado estar no branch de destino antes de mesclar.
# Mude para o branch onde você quer receber as alterações git checkout master # Mescle o branch 'feature_branch' no branch atual git merge feature_branchSe um branch é um ancestral direto do outro, o Git realiza uma mesclagem "fast-forward". Caso contrário, um novo commit de mesclagem é criado. Conflitos podem ocorrer se as mesmas partes de um arquivo forem modificadas em ambos os branches.
-
Rebase de Branches (
git rebase)Reorganiza a sequência de commits de um branch, aplicando-os sobre outra base. Isso resulta em um histórico linear e mais limpo.
# Transfere os commits do 'feature_branch' para serem aplicados após o último commit do 'master' git checkout feature_branch git rebase master git checkout master git merge feature_branch # Uma forma mais direta de fazer o rebase e merge git rebase master feature_branch git merge feature_branch -
Deletando Branches
Remove um branch que não é mais necessário. O Git impede a exclusão de branches com trabalho não mesclado.
# Deleta o branch 'branch_antigo' (se ele já foi mesclado) git branch -d branch_antigo # Força a deleção de um branch (use com cautela) git branch -D branch_antigo
Gerenciamento de Branches Remotos
Branches remotos são referências a branches em repositórios remotos. O nome origin é uma convenção para o repositório clonado originalmente.
-
Sincronizando Dados Remotos
git fetchbaixa dados remotos, egit pullbaixa e mescla.# Baixa alterações do remoto 'origem' git fetch origem # Baixa e mescla alterações do remoto 'origem' git pull origem
Fluxos de Trabalho Comuns
-
Commit Direto em IDEs
Algumas IDEs integram o Git de forma que o comando
commitembutido já executa as etapas degit addegit commit, simplificando o fluxo para o usuário. -
Fluxo de Emergência (Hotfix)
Quando um bug crítico é descoberto em produção:
- Salve ou "pause" seu trabalho atual (ex:
git stash). - Mude para o branch de produção ou um branch de hotfix dedicado.
- Crie um novo branch para o hotfix.
- Corrija o bug, teste e comite a correção.
- Mescle o hotfix no branch de produção e publique a atualização.
- Volte para seu branch de desenvolvimento original e recupere seu trabalho pausado.
Este fluxo garante que correções urgentes sejam aplicadas rapidamente sem interromper o desenvolvimento em andamento.
- Salve ou "pause" seu trabalho atual (ex: