Ferramentas do Git
Introdução
[editar | editar código-fonte]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 | editar código-fonte]Comando Git Log
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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