Ferramentas do Git

Introdução

editar

Normalmente, um usuário comum do git não faz uso de muitas de suas funcionalidades ou não tem conhecimento do seu real poder. Vários comandos que normalmente são utilizados podem fazer muito mais do que mostrar a lista de commits, por exemplo.

Comandos

editar

Comando Git Log

editar

O comando git log é utilizado para visualizar os commits em ordem, certificar-se se o commit foi realizado, etc. Porém, esse comando permite o usuário ter acesso ao código do commit, denominado SHA. Por exemplo:

   $ git log
   commit 734713bc047d87bf7eac9674765ae793478c50d3
   Author: Scott Chacon <schacon@gmail.com>
   Date:   Fri Jan 2 18:32:33 2009 -0800
        fixed refs handling, added gc auto, updated tests
   commit d921970aadf03b3cf0e71becdaab3147ba71cdef
   Merge: 1c002dd... 35cfb2b...
   Author: Scott Chacon <schacon@gmail.com>
   Date:   Thu Dec 11 15:08:43 2008 -0800
        Merge commit 'phedders/rdocs'

O SHA é o código que identifica o commit. Porém, procurar um commit específico dentro de um projeto grande requer muito trabalho, onde o usuário terá que ver toda essa lista, sem estar resumida ou algo do tipo. O git permite que você possa realizar um git log resumido, ou seja, ele lista todos os commits em ordem mostrando apenas sua mensagem e seu respectivo SHA, abreviando-o até que se torne único dentro dos SHAs existentes, como mostraremos adiante. O comando para tal é o --abbrev-commit, como no exemplo a seguir:

   $ git log --abbrev-commit --pretty=oneline
   ca82a6d changed the verison number
   085bb3b removed unnecessary test code
   a11bef0 first commit


A partir disso, o usuário pode simplesmente utilizar o git show e visualizar facilmente o que foi modificado ou inserido no commit selecionado.

Comando git Reflog

editar

Uma outra alternativa na hora de visualizar os commits é utilizar o comando reflog, ou seja, o git mantém o log de onde suas referências de HEAD e branches estiveram nos ultimos tempos (atente-se que as informações do reflog são informações do repositório local).

   $ git reflog
   734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updated
   d921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive.
   1c002dd... HEAD@{2}: commit: added some blame and merge stuff

Toda vez que o ponto extremo da sua branch é atualizada, o Git faz um registro disso em um histórico temporário. Caso deseje visualizar algum desses, basta observar o HEAD referente ao commit/merge/reset/rebase que queira e escrever o comando @{n}, exemplificado a seguir:

   $ git show HEAD@{2}

A visualização do reflog permite o usuário de realizar um possível reset na branch, caso haja a necessidade. No caso, bastaria apenas utilizar um dos comandos do reset referenciando a @{n} da HEAD desejada:

   $ git reset --hard HEAD@{1}

Seguindo a mesma lógica, o git permite você utilizar a mesma sintaxe para visualizar onde uma determinada branch estava em um certo período de tempo. Por exemplo, caso queira visualizar onde a master se encontrava no dia anterior, basta utilizar o comando a seguir (referência só funciona para dados que ainda se encontram no reflog).

   $ git show master@{yesterday}

Intervalos de Commits

editar

Como já sabemos como visualizar ou especificar commits individuais, podemos entrar em uma nova ferramenta que nos permite observar intervalos de commits. Você pode se perguntar "Que modificações existem nesse branch que ainda não foram mescladas (merge) no meu branch principal?".

Imagem para apresentação (erro ao tentar upar a imagem para Wikiversidade) https://git-scm.com/figures/18333fig0601-tn.png

Na imagem, podemos visualizar as diferenças entre commits de duas branches distintas. Agora, caso você queira ver o que tem na sua branch e não tem na master, por exemplo, basta fazer o seguinte:

   $ git log master..experiment
   D
   C

Caso contrário, basta digitar

   $ git log experiment..master
   F
   E

Isso é útil para deixar a sua branch, no caso 'experiment' atualizada em relação a branch master, e auxilia você a se posicionar ou prepara-se para o merge que será feito.

Comando git add -i

editar

Quando estamos trabalhando e produzimos um grande volume de alterações em vários arquivos, isso pode vir a virar uma dor de cabeça. Caso tudo seja feito em somente um commit, com a função apresentada a seguir isso pode ser solucionado de forma simples.

$git add -i
       staged               unstaged path
 1:    unchanged        +2/-2 radio_button.html
 2:    unchanged        +1/-1 testeradiobutton.html
***Commands***
 1: status      2: update      3: revert      4: add untracked
 5: patch      6: diff      7: quit      8: help

Na primeira parte do resultado ele traz os arquivos e seu status, no caso temos 2 arquivos não monitorados, na segunda parte os comandos. Vamos ver alguns.

1: status: traz as mesmas informações do git status, porem sem as opções;

What now> 1
staged           unstaged path
 1:    unchanged        +2/-2 radio_button.html
 2:    unchanged        +1/-1 testeradiobutton.html
*** Commands ***
 1: status      2: update      3: revert      4: add untracked
 5: patch      6: diff      7: quit      8: help
What now>

resultado do comando status;

2: update -> traz os arquivos que não estão sendo monitorados para serem adicionados;

What now> 2
              staged         unstaged path
     1:    unchanged        +2/-2 radio_button.html
     2:    unchanged        +1/-1 testeradiobutton.html
Update>> 

o shell entra no modo de update;

Update>> 1, 2
          staged         unstaged path
* 1:    unchanged        +2/-2 radio_button.html
* 2:    unchanged        +1/-1 testeradiobutton.html
Update>>

selecionado os arquivos eles estão com um * na frente indicando que estão sendo monitorados, e prontos para serem commitados;

4: diff -> traz as alterações feitas em um arquivo.

*** Commands ***
 1: status      2: update      3: revert      4: add untracked
 5: patch      6: diff      7: quit      8: help
What now> 6
          staged     unstaged path
 1:        +2/-2      nothing radio_button.html
 2:        +1/-1      nothing testeradiobutton.html
Review diff>>

Arquivos monitorados;

Review diff>> 2
diff --git a/testeradiobutton.html b/testeradiobutton.html
index 37f0ec0..677f716 100644
--- a/testeradiobutton.html
+++ b/testeradiobutton.html
@@ -95,7 +95,7 @@
<label for="bankslip">Boleto</label>
-Botoes de radio button
+botão     
\ No newline at end of file

Alterações feitas na tag p.

3: revert -> listas os arquivos monitorados para serem excluídos (altera para não monitorados);

What now> 3
              staged         unstaged path
 1:        +2/-2          nothing radio_button.html
 2:        +1/-1          nothing testeradiobutton.html
Revert>>

entrou no modo de Reverter

Revert>> 2
          staged     unstaged path
 1:        +2/-2      nothing radio_button.html
* 2:        +1/-1      nothing testeradiobutton.html
Revert>>

mostra que o arquivo 2 foi removido, indicado pelo *;

What now> 1
          staged     unstaged path
 1:        +2/-2      nothing radio_button.html
 2:    unchanged        +1/-1 testeradiobutton.html

vendo como estão os arquivos com o comando status;

Comando git commit --amend

editar

este comando tem por função alterar o último commit feito.

imagina que a mensagem do commit não saiu boa, então você precisa alterá-la afim de proporcionar uma melhor compreensão para aqueles que terão de entender o que foi feito.

para isso você pode usar o comando:

$ git commit --amend
alteração do botão e teste radio button
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# No ramo master
# Mudanças a serem submetidas:
#       modificado: radio_button.html
#       modificado: testeradiobutton.html
#

tela para alteração da mensagem do commit, faça as alterações e salve, pronto a mensagem foi alterada;

Agora em vez de querer alterar a mensagem você quer alterar o commit, pois faltou anexar alterações feitas em um arquivo. veja o commit a segui:

commit 0e3f26853ff438e5a0709def3f03b80937a04f79
Author: GesielFreitas <gesiel.was.f@gmail.com>
Date:   Sun Aug 21 17:15:54 2016 -0300
   alteração do botão

último commit; veja essa alteração que precisa ser adicionada no commit acima.

$ git status
No ramo master
Changes not staged for commit:
 (utilize "git add <arquivo>..." para atualizar o que será submetido)
 (utilize "git checkout -- <arquivo>..." para descartar mudanças no diretório de trabalho)
   modificado: testeradiobutton.html
nenhuma modificação adicionada à submissão (utilize "git add" e/ou "git commit -a")

agora adicione o arquivo para submeter

$ git add testeradiobutton.html

adicionando no último commit

$ git commit --amend

alteração do botão e radio button
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# No ramo master
# Mudanças a serem submetidas:
#       modificado: radio_button.html
#       modificado: testeradiobutton.html
#

o arquivo testeradiobutton.html já aparece nas mudanças a serem submetidas e a mensagem pode ser alterada e/ou não depende do seu caso, aqui foi acrescentado “e radio button”.

salve o arquivo e pronto, vejamos o git log do commit alterado:

$ git log
commit afcfa1776d356d2c5cde2380b798bd15f516f94c
Author: GesielFreitas <gesiel.was.f@gmail.com>
Date:   Sun Aug 21 17:15:54 2016 -0300
   alteração do botão e radio button


Alterando commit com pixup+rebase -i

editar

Imagina que por algum motivo você precise alterar um commit anterior, que por algum motivo as alterações que você tem que submeter devem pertencer ao mesmo. vejamos alguns commits

$ git log
commit 98cf96fd75f1c4dc53904f983d47bb1903ce6169
Author: GesielFreitas <gesiel.was.f@gmail.com>
Date:   Mon Aug 22 10:29:09 2016 -0300
   alterando mensagem do usuario
commit 072b9f8765620109399a72f5d91e0f8d175e79d8
Author: GesielFreitas <gesiel.was.f@gmail.com>
Date:   Mon Aug 22 10:26:58 2016 -0300
   arquivos iniciais

veja o commit 072b9f8765620109399a72f5d91e0f8d175e79d8 vamos ver as alterações que foram submetidas nele.

$ git diff 072b9f8765620109399a72f5d91e0f8d175e79d8
diff --git a/testeradiobutton.html b/testeradiobutton.html
index 408270e..b131e84 100644
--- a/testeradiobutton.html
+++ b/testeradiobutton.html
@@ -97,7 +97,7 @@
botão alterar opçoes
-Aqui você tem varias opçoes!
+Aqui você tem varias opçoes, escolha um que se encaixe melhor para você

agora vamos enviar este arquivo com suas alterações.

$ git status
No ramo master
Changes not staged for commit:
 (utilize "git add <arquivo>..." para atualizar o que será submetido)
 (utilize "git checkout -- <arquivo>..." para descartar mudanças no diretório de trabalho)
    modificado: radio_button.html
nenhuma modificação adicionada à submissão (utilize "git add" e/ou "git commit -a")

vamos adicionar para submeter.

$ git add radio_button.html 
$ git commit --fixup=072b9f8765620109399a72f5d91e0f8d175e79d8
[master 6607ef5] fixup! arquivos iniciais
1 file changed, 1 insertion(+), 1 deletion(-)

mesclando os commits

$ git rebase -i HEAD~2
pick 072b9f8 arquivos iniciais
pick fixup! arquivos iniciais 
# Rebase 072b9f8..a69c0e6 onto 072b9f8
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out


substituir pick por f e colocar o arquivo logo abaixo do que você está fazendo a mescla.

pick 072b9f8 arquivos iniciais
f fixup! arquivos iniciais

salva as alterações e feche!

Pronto agora vamos verificar!

$ git diff 072b9f8765620109399a72f5d91e0f8d175e79d8
diff --git a/radio_button.html b/radio_button.html
index 3c9950f..5ea04a7 100644
--- a/radio_button.html
+++ b/radio_button.html
@@ -18,4 +18,4 @@
    <label for="bankslip">paypal</label>
-Meios de pagamentos, escolha um para continuar
+Pagamentos aceitos
diff --git a/testeradiobutton.html b/testeradiobutton.html
index 408270e..e9b1b7e 100644
--- a/testeradiobutton.html
+++ b/testeradiobutton.html
@@ -97,7 +97,7 @@
 botão alterar opçoes
-Aqui você tem varias opçoes!
+Aqui você tem varias opçoes

Referencias

editar