Diquinhas e truques legais pra usar no Git

Esse post tem como motivação, uma semana difícil.

É isso aí, uma semana de desafios relacionados a scm (o que não é lá a coisa mais relaxante do mundo). Uma semana cheia de tentativas frustradas de git cherry-picks e outras coisas do git, que eu provavelmente não precisaria usar se o código estivesse sendo gerenciado “direito”.

Agora, deixando de ser chorão e tentando ver as coisas pelo lado positivo: aprendi umas coisinhas legais, que podem ser úteis pra mim no futuro, e por que não, pra você :)

A ideia aqui não é ensinar git, nem apresentar os comandos básicos ou alguma coisa desse tipo. A ideia é mostrar alguns truques e manhas legais do git, que você vai querer ter conhecido antes.

Então vamos lá…

Alias (co > checkout)

Você pode criar alias para qualquer comando do git. Você só precisa setar o alias ao comando que você quiser, desse jeito:

$ git config --global alias.st status 

É só substituir o alias pelo apelido que você quiser e colocar o comando na frente.

É bem melhor digitar “git co”, do que “git checkout” né?
É só criar o alias! Já vi gente (eu) que usa um alias g pro comando git. É muita preguiça haha. Isso te daria uma coisa tipo:

$ g co

É, um pouco diferente, mas com o tempo se ganha bastante em produtividade.

Autocomplete no shell

Uso o git pela linha de comando, e graças a Deus o autocomplete do git sempre esteve habilitado aqui. Se você usa o git shell pelo ruWindows, o autocomplete já deve estar configurado.

Caso o auto complete não esteja habilitado no seu terminal, você pode baixar o script de autocomplete do git nesse link.

Depois de baixar, copie o arquivo para o diretório home, e adicione ao seu arquivo .bashrc a linha:

source ~/git-completion.bash

Pronto. Agora quando você digitar um comando git e apertar tab, ele deve exibir pra você os comandos:

$ git co<tab>
commit config

Checkout e reset em arquivos

Você já deve ter usado esses dois comandos: checkout e reset, para trabalhar com branches e commits.

O que talvez você não sabia, é que você também pode usar o checkout e o reset em arquivos.

Quando usamos o git reset em um arquivo, o git atualiza a área de stage (staging area), fazendo com que um determinado arquivo volte ao estado em que se encontrava em um commit anterior qualquer.

Isso significa que podemos remover o arquivo “jedi.js” da área de stage, e fazer com que ele fique igual à sua versão no HEAD com o comando:

$ git reset HEAD jedi.js

O resultado da operação, é o arquivo fora da área de stage e com conteúdo igual, ao presente no commit mais recente.

Reset File

Bem legal! Agora vamos dar uma olhada no checkout.

O bom e velho git checkout que usamos para alternar entre branches, quando usado com um caminho para um arquivo, faz o git apontar para esse arquivo. Sem atualizar a branch atual.

$ git checkout HEAD jedi.js

Agora nosso arquivo “jedi.html” está igual ao arquivo presente em HEAD, e a nova versão do arquivo não está na área de stage.

Checkout File

Salve isso em algum lugar, sério. Você vai precisar um dia.

Dessa forma, você pode só apontar para a versão de um arquivo em outra branch (ou na mesma), e fazer alterações pra logo em seguida adicionar o arquivo modificado a staging area com o git add ..

Stash, pra ser feliz

O comando git stash, pega toda sua área de stage e salva em um lugar separado, limpando a sua stage area.

Isso é muito legal, porque dessa forma você pode guardar um conjunto de alterações que você fez mas não quer commitar ainda por algum motivo.

$ git stash

Particularmente, uso mais o stash quando preciso fazer git pull e não quero que as alterações na minha área de stage gerem conflitos com os arquivos baixados.

Depois de criar seu stash com o comando git stash, você precisa aplicar seu stash. Isso é, adicionar a sua área de stage todas as alterações que você colocou no stash. Para fazer isso, basta usar:

$ git stash apply

Você pode ter mais de 1 stash. Eles serão sempre aplicados na ordem “first in, last out” caso você não especifique o nome do stash logo depois do apply.

Amend, pra se redimir

Se você fez um commit, e depois lembrou que esqueceu de adicionar uma modificação em um arquivo (acontece), use o --amend.

Vejamos:

Commit amend

Aqui o parâmetro –no-edit salva sua pele, fazendo com que a mensagem do commit no qual você está fazendo o amend, se mantenha a mesma.

Diffs entre commits

Para ver as alterações dos últimos commits, podemos usar:

$ git log --stat

Esse comando vai mostrar os arquivos e a quantidade de linhas adicionadas e removidas por arquivo em cada commit. Pra ver o que exatamente foi alterado em um commit, use o comando diff.

Para ver a diferença entre 2 commits com os SHAs dos commits em mãos (0da94be e 59ff30c), use:

$ git diff 0da94be 59ff30c

Se você usa o GitHub, talvez seja melhor ver as diferenças por lá. + veja como

É isso aí !

É isso aí amiguinhos (acabei de ver essa piadinha do Bugginho e já to falando que nem ele). Existem algumas outras manhas e coisas legais que o git oferece, mas pro post não ficar grande, escolhi as que eu mais gosto.

Se você achou um absurdo o post não ter uma dica legal que você conhece, comenta aí pra gente :)

Até a próxima o/