Git

De Feliwiki

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 semelhantes (em inglês): Git for the lazy

O Git é um sistema de controle de versões.

Tabela de conteúdo


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 braços 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

Como baixar um repositório remoto

$ cd ~/wa-git
(veja working area para entender o que significa o diretório wa-git mencionado acima.)
$ 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 braço específico

$ git checkout <braco-local>
$ git pull origin <braco-remoto>

Como enviar alterações

$ git commit -a — faz um commit local de todos os arquivos modificados.

E uma destas opções:

  • $ git push — envia alterações do braço local para o remoto equivalente (e.g. master -> orign/master).
  • $ git push --all — envia alterações de todos os braços.
  • $ git push <remote-branch> <source-branch> — envia alterações de um braço local para outro remoto

Trabalhando com braços e tags

Para criar tag

$ git tag -a <tag-name>
$ git push --tags

Para criar braço

Para criar um braço e já dar checkout para ele:

$ git checkout -b <nome-novo-braço>

ou

$ git branch <nome-novo-braço> (porém ele não dá checkout para o novo braço)

e para enviar ao servidor:

$ git push origin <nome-novo-braço> — para enviar apenas um braço

ou

$ git push --all — envia todos os braços locais para o repositório de origem

Para listar braços

$ git branch (lista somente os locais)
$ git branch -a (lista todos)
$ git branch -r (lista somente os remotos)

Para alternar para um braço, tag ou versão

$ git checkout [-f] <braço, tag ou versão> — a opção -f faz com que arquivos modificados localmente sejam perdidos.

Caso o braço que você alterne não seja "local", ou seja, caso seja uma versão no histórico, uma tag ou mesmo um braço remoto (no estilo origin/<nome-do-braço>) você deve fazer um "checkout -b <nome-do-braço>" em seguida para criar um braço local.

Para remover um braço

$ git branch -d <nome do braço>

Para remover um braço 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 braço destino> (você deve "estar" no braço de destino)
$ git merge <nome do braço 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:

$ git status

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 [1].

Verificando a diferença entre a versão atual e o último commit de um determinado arquivo

$ git diff <arquivo>

Verificando as modificações locais

$ git diff [-b] (a opção -b ignora os espaços em brancos)

Verificar diferença entre dois braços

$ git diff <braco1>..<braco2> --stat

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

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 braços em um só etc.

Ligações externas

Ferramentas pessoais