Git
Git para preguiçosos
- Guia prático do Git. Autor: micaroni@gmail.com (fml.eti.br). Licença: CC-by.
- Veja também esta página semelhante (em inglês): Git for the lazy
O Git é um sistema de controle de versões.
Como instalar o Git
No Windows
Baixe e instale a versão mais recente em:
Outros sistemas
Dê uma olhada em:
Conceitos básicos
Veja o artigo sistema de controle de versões da Wikipédia para ter uma noção sobre esse tipo de sistema. O conceito do Git é um pouco diferente do CVS e SVN, pois é um sistema distribuído e com muito mais recursos de controle do histórico e de branchs de desenvolvimento. Toda cópia local contém todo o histórico de desenvolvimento e os commits são feitos localmente. Somente com o comando push é que as alterações são enviadas para o repositório de origem.
- Nota: Veja também http://git.or.cz/gitwiki/GitSvnComparsion para ter uma idéia melhor das vantagens e desvantagens do Git sobre o SVN.
Primeira vez
Configurar o nome do usuário (importante!):
$ git config --global user.name "Your Name Comes Here"$ git config --global user.email you@yourdomain.example.com
Colocar cores:
$ git config --global color.diff auto$ git config --global color.status auto$ git config --global color.branch auto
Habilitar git-rerere (opcional):
$ git config --global rerere.enabled 1
Como baixar um repositório remoto
$ cd ~/wa-git- (veja working area para entender o que significa o diretório
wa-gitmencionado acima.)
- (veja working area para entender o que significa o diretório
$ git clone <URL do repositório>
Exemplo:
$ git clone ssh://felipe@fml.eti.br/var/git/util
Como criar um novo repositório local
$ cd ~/wa-git$ cd <diretório-do-seu-projeto>$ git init$ git add .
Como adicionar novos arquivos ao controle de versão
$ git add <nome-do-arquivo>— mas tenha cuidado para não enviar arquivos indesejados.
$ git add .— adiciona todos os arquivos do diretório atual para baixo recursivamente.
Como receber alterações
$ git pull
Para receber alterações em um branch específico
$ git checkout <local-branch>$ git pull origin <remote-branch>
Como enviar alterações
$ git commit -a— faz umcommitlocal de todos os arquivos modificados.
E uma destas opções:
$ git push— envia alterações do branch local para o remoto equivalente (e.g.master -> orign/master).$ git push --all— envia alterações de todos os branchs.$ git push origin <source-branch>— envia alterações de um branch local para outro remoto
Trabalhando com branchs e tags
Para criar tag
Para criar branch
Para criar um branch e já dar checkout para ele:
$ git checkout -b <nome-novo-branch>
ou
$ git branch <nome-novo-branch>(porém ele não dá checkout para o novo branch)
e para enviar ao servidor:
$ git push -u origin <nome-novo-branch>— para enviar apenas um branch
ou
$ git push --all— envia todos os branchs locais para o repositório de origem
Para listar branchs
$ git branch(lista somente os locais)$ git branch -a(lista todos)$ git branch -r(lista somente os remotos)
Para alternar para um branch, tag ou versão
$ git checkout [-f] <branch, tag ou versão>— a opção-ffaz com que arquivos modificados localmente sejam perdidos.
Caso o branch que você alterne não seja "local", ou seja, caso seja uma versão no histórico, uma tag ou mesmo um branch remoto (no estilo origin/<nome-do-branch>) você deve fazer um "checkout -b <nome-do-branch>" em seguida para criar um branch local.
Para remover um branch
$ git branch -d <nome do branch>
Para remover um branch remoto
$ git branch -d -r origin/<name-of-branch>$ git push origin :<name-of-branch>(obs.: sem o origin)
Para mesclar
$ git checkout <nome do branch destino>(você deve "estar" no branch de destino)$ git merge <nome do branch origem> [--no-ff](a opção --no-ff serve para não permitir o fast foward)
Desfazendo
Desfazendo um commit específico e manter o histórico
$ git revert <versao>
- <versao> pode ser um intervalo como por exemplo: 0b7cd284..642e314
- <versao> também pode ser HEAD para desfazer o último commit
- não use este comando quando houver alterações locais!
Reverter apenas alguns arquivos ou path
$git checkout <versao> -- <path>
Onde <versao> é o número da versão correta do arquivo.
Desfazendo arquivo adicionado no git por engano
$ git rm --cached <file>(funciona antes e depois do commit, recomendado!)
ou
$ git reset HEAD <file>(apenas antes do commit)
Desfazendo alterações locais
- Para todos os arquivos
$ git reset --hard HEAD
- Apenas para alguns arquivos
$ git checkout <path>
Outros comandos úteis
Adicionar arquivos ao ignore list
$ echo "padrao*" >> .gitignore
Para verificar se todos os arquivos indesejados já estão no ignore list use o comando:
Até que a mensagem "nothing to commit (working directory clean)" apareça. Depois de fazer isso, você pode enviar o próprio arquivo .gitignore ao repositório:
$ git add .gitignore$ git commit
Verificar quantas versões desde o início (versão estilo SVN)
O seguinte comando conta quantos commits foram dados desde a primeira versão:
$ git log --pretty=oneline --all | wc -l
Mostrar histórico com o nome dos arquivos modificados
$ git log --stat
Como dar pull ou push sem o SSH pedir a senha toda vez
- Leia SSH sem senha
Verificando a diferença entre a versão atual e o último commit de um determinado arquivo
$ git diff <arquivo>
Use diff --color-words para destacar as palavras modificadas
Verificando as modificações locais
$ git diff [-b](a opção -b ignora os espaços em brancos)
Verificar diferença entre dois branchs
$ git diff <branch1>..<branch2> --stat
O mesmo que git diff HEAD^..HEAD
$ git show
Como reduzir o uso de espaço em disco
- Tente apenas
$ git gc --aggressive
- Avançado
$ git repack -a -d --window=50 --depth=50 --window-memory=1024m
Mostrar estatísticas básicas sobre alterações
Tente aplicar o parâmetro --stat em diversos comandos, como o git log e git diff por exemplo.
Mostrar informações sobre o repositório remoto
É útil porque ele exibe a URL do repositório caso você tenha esquecido.
$ git remote show origin
Opção para ignorar espaços em branco e quebras de linha
Use -w junto com comandos de diff ou quando usar --stat
para que o diff ignore todos os espaços em brancos.
Git avançado
Já debulhou o git e está se sentindo limitado? Aprenda a refazer o histórico, a dar commit em apenas uma parte do arquivo, a mesclar diversos branchs em um só etc.
- Veja o artigo git avançado.
Git com Subversion (SVN)
- Apaixonado pelo git e sua empresa usa SVN? Seus problemas acabaram! Veja git com SVN