No dia-a-dia utilizar recursos das ferramentas certas ajudam a agilizar nosso trabalho, tratando-se de controle de versões o Git tem diversos truques interessantes. Vou resumir de forma rápida alguns comandos que utilizo diariamente, a idéia é concentrar aqui novas dicas que forem aparecendo, então sugestões são bem vindas.
INSTAWEB
Um dos comandos mais úteis e interessantes que tenho utilizado ultimamente para fazer revisão de código ou para ter um histórico do projeto é o “instaweb” que inicia um servidor local onde podemos navegar (http://127.0.0.1:1234/?p=.git;a=shortlog) pelos commits e verificar as diferenças do repositório de uma forma bem simples e clara. É importante lembrar que ao subir o serviço o terminal fica liberado sendo necessário parar o servidor após utilizar senão o processo continuará “rodando”.
git instaweb --httpd webrick git instaweb --httpd webrick --stop
STASH
O comando “stash” é útil quando estamos trabalhando em algum código que ainda não está concluído e precisamos atualizar o projeto com as últmas atualizações, então colocamos nossas alterações em área isolada com git stash, atualizamos o projeto e aplicamos novamente nossas alterações com git stash apply. Exemplo:
git stash git stash apply
AMEND
O comando “amend” é utilizado para corrigir ou re-editar a mensagem do último commit desde que ele não tenha sido enviado para o repositório. Exemplo:
git commit -m "Alguma mensagem errada" git commit --amend -m "Correção da mensagem"
GREP
Com “grep” encontramos palavras dentro dos arquivos do projeto, combinado com -n é possível saber em qual linha a palavra ou o conjunto delas foi encontrado.
git grep -n "palavra ou frase procurada"
RESET
Reset pode ser utilizado basicamente para duas situações, uma delas é desfazer um commit mantendo as alterações realizadas no código com “–soft” e para desfazer um commit completamente incluindo as alterações com “–hard”. Exemplo:
git reset --soft HEAD~1 git reset --hard HEAD~1
LOG
Temos diversas formas para verificar os logs de commits do projeto, abaixo alguns tipos de formatações para exibí-los. O último “shortlog” mostra a quantidade de commits do projeto.
git log --pretty=oneline --graph --all git log --pretty=oneline --abbrev-commit git whatchanged -n 1 git shortlog -s -n
Para complementar, uma dica para mostrar o branch atual no terminal. No arquivo ~/.bashrc no Ubuntu ou ~/.bash_profile no MacOS inclua as linhas abaixo, feche o terminal e abra novamente para que as alterações sejam aplicadas.
export PS1="\[\033[38m\]\u\[\033[32m\] \w \[\033[31m\]\`ruby -e \"print (%x{git branch 2> /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '(\1) ')\"\`\[\033[37m\]$\[\033[00m\] "
O terminal ficará assim:
user ~/projects/blog (master) $
Referências:
http://gitready.com/
http://book.git-scm.com/
http://learn.github.com/p/intro.html
http://book.git-scm.com/4_tracking_branches.html
http://cheat.errtheblog.com/s/git
http://book.git-scm.com/4_ignoring_files.html
março 9th, 2010 at 19:12
[...] original: http://mauriciodeamorim.com.br/2010/03/08/facilitando-o-trabalho-com-git/ [...]
maio 10th, 2010 at 13:42
Uma pequena correção, o amend não é apenas para trocar a mensagem do último commit. Na verdade ele altera o ultimo commit e a mensagem é apenas uma das coisas que podem ser mudadas.
Você também pode modificar o código, porém tem que lembrar de antes rodar um git add/rm no que mudar.
maio 12th, 2010 at 16:39
Realmente a correção da mensagem é apenas a parte mais trivial, a possibilidade de modificar o código do último commit e corrigir algo que acabou passando batido é a grande sacada deste comando.
Valeu Tapajós, abraços.
maio 24th, 2010 at 14:42
Bem útil o post. Simples, direto e exemplificado.
Achei muito legal a dica para mostrar o branch. Resolvi colocar isso no script afterFormat (http://github.com/hugomaiavieira/afterFormat) que fiz para Ubuntu 10.04, mas vi que você usou o ruby para pegar o nome do branch. Como tem gente que pode não querer instalar o ruby, fiz uma versão com shell para ficar mais genérico:
export PS1=”\[33[36m\]\u \[33[33m\]\w \[33[34m\]\`branch=\$(git branch 2> /dev/null | grep \”\* .*\” | grep -Pwo \”.*\”) && test -n \$branch && echo \”(\$branch) \”\`\[33[00m\]$ ”
Troquei as cores também para não confundir com o vermelho e verde dos testes.
Abraço!
maio 25th, 2010 at 1:39
Hugo, excelente! Parabéns pelo AfterFormat e também pelo seu blog. Obrigado pelo comentário e contribuição.
Abraço!