seg
ago 9th

Git – Removendo tags do repositório ...

Uma forma de criar uma marcação no Git seja para documentar uma modificação importante ou para marcar uma versão é usar o comando “tag”. Caso você se depare com o problema de remover uma tag criada acidentalmente no repositório fica aqui a dica de como corrigir.

Imaginando que após alguns commits queremos criar uma tag fariamos isto:

git tag -a beta0.1 -m “Primeira versão beta”

Continuamos trabalhando e após mais alguns commits fazemos novamente:

git add . & git commit -am “Incluindo arquivo README”
git tag -a beta1.0 -m “Mais uma versão beta” 
git push origin master
git push --tags
Counting objects: 6, done.
...
To git@github.com:mauriciodeamorim/testes_com_tags.git
 * [new tag]     	beta0.1 -> beta0.1
 * [new tag]     	beta1.0 -> beta1.0

Aqui cometemos o erro de criar outra tag numa sequência diferente da inicial e enviamos ao repositório.

Olhando nossa árvore no Gitk temos:


Em nosso repositório no GitHub ficou assim:


Então vamos considerar que a tag válida é a primeira “beta0.1” , então apagaremos a tag beta1.0 do repositório e depois localmente.

git push origin :beta1.0
git tag -d beta1.0

Agora olhando tanto para o GitK quanto para o repositório temos tudo em ordem novamente.

Outros comandos

Envia uma tag de cada vez ao repositório git push origin beta0.1
Envia todas as tags ao repositório git push – - tags
Envia commits e tags de uma só vez ao repositório git push origin master – - tags
Lista as tags existentes git tag
Descreve a tag e quantos commits temos após ela git describe
Mostra a tag e commit detalhadamente git show beta0.1
Mostra a tag detalhadamente git tag -v beta0.1

Referências:
Git Ready
Github – Working with remotes

seg
jul 12th

Manipulando branches remotos com Git ...

Reorganizando meus projetos no Github me deparei com o problema de ter criado muitos branches locais e remotos e tudo estava uma grande bagunça. Os comandos que me ajudaram a resolver isto foram:

Dado os branches locais

macos-snow ~/project (master) git branch
* master
  fix_counter
  rails3-version

Para criá-los remotamente use

macos-snow ~/project (master) git push --all

Ou para um branch específico

macos-snow ~/project (master) git push origin rails3-version

Para apagar branches locais

macos-snow ~/project (master) git branch -D rails3-version

Para apagar branches remotos

macos-snow ~/project (master) git push origin :rails3-version

Renomear branches locais

macos-snow ~/project (master) git branch -m old_branch new_branch

As referências que encontrei para renomear branches remotos não me foram úteis por isso fiz da forma mais prática renomeando o branch local, enviando para repositório e apagando o branch remoto antigo.

Referências:
- Help Github
- Git ready

seg
mar 8th

Facilitando o trabalho com Git ...

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