N√£o versionar seus arquivos pode ser uma grande dor de cabe√ßa. Afinal, quem nunca desejou ter salvado uma vers√£o alternativa quando o Undo n√£o deu mais conta de voltar todas as altera√ß√Ķes feitas nas √ļltimas horas? Eu j√°, e v√°rias vezes.

Por isso, agora todos os projetos que participo s√£o versionados com Git. E, durante meu primeiro ano como desenvolvedor front-end, eu colecionei alguns comandos bem √ļteis que aumentam bastante minha produtividade ao utilizar esta ferramenta.

1 - Adicionando modifica√ß√Ķes interativamente

Cortar a linha de racioc√≠nio durante a implementa√ß√£o de uma funcionalidade n√£o √© uma boa ideia. Portanto, √© normal que mais de uma altera√ß√£o seja feita no projeto entre um commit e outro. Para manter as boas pr√°ticas de utiliza√ß√£o do Git, precisamos ent√£o dividir as altera√ß√Ķes dentro do mesmo arquivo em pacotes, algo que n√£o √© poss√≠vel usando apenas o cl√°ssico git add <file>.

Para fazer isso, podemos usar a adição interativa do git add:

git add <file> --patch

Usando esse comando navegamos pelo arquivo adicionando ou n√£o cada uma de suas partes. y, por exemplo, adiciona o pacote que est√° sendo mostrado. n faz o oposto. Tamb√©m √© poss√≠vel dividir o pacotes em pacotes menores (s), procurar um pacote que corresponde a uma regexp (/), ou at√© editar um pacote manualmente (e). Veja todas as op√ß√Ķes na documenta√ß√£o.

2 - Mostrar usu√°rios listados por quantidade de commits

git log --format='%an' . | \
    sort | uniq -c | sort -rn | head

Com esse comando, você lista os usuários ativos no repositório na branch atual, rankeados pela quantidade de commits.

O legal deste comando é que basta trocar o . por qualquer outro path para criar a lista de acordo com a atividade dentro daquela pasta/arquivo. Então fica fácil saber quem está alterando mais os controllers, models ou as views de um aplicativo.

3 - Log com gr√°fico e cores

Um dos motivos de antes eu usar o SourceTree com o Git era justamente sua visualização dos gráficos das branchs e merges. Porém, após descobrir este comando shell, fiz a transição completa para o Terminal:

git log \
  --graph \
  --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \
  --oneline

O que ele faz aqui √© basicamente listar os commits do reposit√≥rio de uma forma bem visual, com cores e gr√°ficos. Voc√™ pode inclusive escrever um caminho para um arquivo no final do comando e receber um log apenas das altera√ß√Ķes feitas naquele arquivo.

4 - Informa√ß√Ķes sobre altera√ß√Ķes em um commit

git diff-tree --no-commit-id --shortstat -r <commit-hash>

Rodando este comando, voc√™ pode ver informa√ß√Ķes gerais sobre as altera√ß√Ķes feitas em um commit <commit-hash>. Se voc√™ preferir uma resposta mais completa, pode substituir a flag --shortstat por --stat, --numstat ou --dirstat. Leia a documenta√ß√£o do diff-tree para entender o que cada uma dessas flags faz e conhecer outras op√ß√Ķes interessantes.

5 - Sincronizar fork no Github

Uma das grandes funcionalidades do Github √© permitir que usu√°rios criem forks de reposit√≥rios. Assim como atualizar uma branch, tamb√©m √© necess√°rio atualizar seus forks com as √ļltimas altera√ß√Ķes no reposit√≥rio principal.

Fazer isso é bem fácil:

# Requer um remote "upstream", apontando para o repositório original
# exemplo: `git remote add upstream git@github.com:user/repo.git`
git fetch upstream; git checkout master; git merge upstream/master

BONUS - Mostrando arquivos com conflito

Se você trabalhou no mesmo arquivo que um colega, existe bastante chance que algum conflito apareça. Para listar todos os arquivos com conflito que ainda não foram resolvidos, utilize o seguinte comando:

git diff --name-only --diff-filter=U

Usando estes comandos voc√™ certamente acelerar√° ainda mais seu fluxo de trabalho em um projeto versionado com Git. Estes comandos e outros est√£o no meu gist git-useful, uma cole√ß√£o de comandos √ļteis que venho criando durante meu primeiro ano como desenvolvedor front-end.

Eu também recomendo que você veja o Git cheat sheet, um extenso arquivo cheio de dicas e comandos interessantes para usar o Github.