A configuração global do Git é o primiero passo para etsabelecer sua identidade no sistema de controle de versão.
git config --global user.name "SeuNome"
git config --global user.email "seu@email.com"
Gerenciamento de Repositórios Locais
Inicializar um novo repositório local é uma operação simples que estabelece a estrutura de versionamento no diretório atual.
git init
Clonar um repositório existente cria uma cópia completa incluindo todo o histórico.
git clone url_do_repositorio
cd nome_do_projeto
Trabalhando com a Área de Preparação
O processo de preparação de alterações (staging) é fundamental no fluxo de trabalho do Git. A área de preparação atua como um buffer intermediário onde as modificações são organizadas antes de serem efetivamente gravadas no histórico.
Adicionar arquivos específicos à preparação:
git add arquivo1.txt arquivo2.java
Para adicionar recursivamente todos os arquivos em um diretório:
git add diretorio/
O comando git add . deve ser utilizado com cautela, pois ele prepara todas as alterações no diretório de trabalho atual.
Visualizar o que foi preparado para o próximo commit:
git diff --staged
Remover um arquivo da preparação mantendo-o no diretório de trabalho:
git rm --cached nome_do_arquivo
Gravando Alterações no Histórico
Após preparar as alterações desejadas, o commit as registra permanentemente no histórico do repositório.
git commit -m "Descrição clara das alterações"
Para incorporar todas as alterações em arquivos já rastreados automaticamente na preparação e realizar o commit:
git commit -a -m "Descrição"
Modificar o último commit (incluindo adicionar esquecimentos ou alterar a mensagem):
git add arquivo_esquecido.txt
git commit --amend
Monitorando o Estado do Projeto
A inspeção constante do estado do diretório de trabalho e da área de preparação é crucial.
git status
A saída indica:
- Untracked files: Arquivos novos não rastreados pelo Git.
- Changes to be committed: Alterações preparadas (staged) para o próximo commit.
- Changes not staged for commit: Modificações em arquivos rasrteados ainda não preparadas.
A versão concisa (git status -s) utiliza códigos como 'M' para modificado e 'A' para adicionado.
Exibir um histórico detalhado dos commits:
git log --oneline --graph --all --decorate
Para ver as diferenças introduzidas por um commit específico:
git show hash_do_commit
Desfazendo Alterações
Descartar modificações no diretório de trabalho em arquivos já rastreados, revertendo-os para o estado da última preparação ou commit:
git checkout -- nome_do_arquivo
Desfazer a preparação (unstage) de um arquivo, movendo-o de volta para o diretório de trabalho como modificado:
git reset HEAD nome_do_arquivo
Reverter o repositório inteiro para um estado anterior específico:
git reset --hard hash_do_commit
Organização com Branches
Criar uma nova branch e mudar para ela:
git checkout -b nome_da_nova_branch
Listar todas as branches locais e remotas:
git branch -a
Para combinar o trabalho de uma branch no histórico atual:
git checkout main
git merge nome_da_branch_para_mesclar
Quando ocorrem conflitos durante uma mesclagem, é necessário editá-los manualmente nos arquivos indicados, e depois preparar os arquivos resolvidos antes de finalizar a mesclagem.
git add arquivo_com_conflito.txt
git commit -m "Resolve conflito entre branch X e Y"
Colaboração via Repositórios Remotos
Adicionar um repositório remoto:
git remote add nome_remoto url_do_repositorio
Obter alterações de um remoto (download sem integração):
git fetch nome_remoto
Enviar commits locais para o repositório remoto:
git push nome_remoto nome_da_branch
Para sincronizar as branches locais de acompanhamento (tracking) com as remotas:
git branch -u nome_remoto/nome_da_branch
Baixar e integrar alterações do remoto na branch atual (equivalente a git fetch seguido de git merge):
git pull nome_remoto nome_da_branch
Trabalhando com Tags
Criar uma tag anotada para marcar um ponto importante, como uma versão:
git tag -a v1.0 -m "Versão 1.0 estável"
Compartilhar uma tag específica com o repositório remoto:
git push nome_remoto v1.0
Enviar todas as tags para o remoto:
git push nome_remoto --tags