BeyondClick

Desenvolvimento de sistemas além do Click…

Commit parcial no Git

skilled and git

Sabe quando você está alterando um arquivo e chega em um ponto que gostaria de fazer o commit de apenas parte do arquivo? Então, o Git possui uma funcionalidade chamada Interactive Staging que pode te ajudar.

Usando o parâmetro -i o git irá executar o add no modelo interativo.

Usarei como exemplo o arquivo.txt. Nele eu removi uma linha e adicionei duas. E, eu farei commit apenas da remoção da linha, ignorando a adição das duas linhas.

$ git add arquivo.txt -i

Como resposta ele irá apresentar os comandos disponíveis:

           staged     unstaged path
  1:    unchanged       +2/-1 arquivo.txt

*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now>

Escolhendo o comando 5

What now> 5

O git irá te perguntar qual arquivo você quer adicionar, parcialmente, no stage.

           staged     unstaged path
  1:    unchanged       +2/-1 arquivo.txt
Patch update>>

Selecione o arquivo que você irá adicionar, no stage, informando o número do arquivo. No caso, só tenho um arquivo para adicionar.

patch update>> 1

Selecionado o arquivo o git mostra sua seleção

           staged     unstaged path
* 1:    unchanged        +2/-1 Gemfile
Patch update>>

Neste ponto, precione a tecla Enter para o ser apresentado a primeira diferença do arquivo e decidir o que fazer com ela.

diff --git a/arquivo.txt b/arquivo.txt
index 5199dfd..aa2b489 100644
--- a/arquivo.txt
+++ b/arquivo.txt
@@ -1,1 +1,1 @@
-Linha deletada
+Primeira linha adicionada
+Segunda linha adicionada
Stage this hunk [y,n,q,a,d,/,s,e,?]?

Se você observar ele está mostrando as duas alterações feitas:

  • Remoção da linha 1
  • Adição das linhas 2 e 3

Como você que adicionar, apenas, a remoção da linha 1, vamos pedir ao git que separe as duas alterações, opção: “s”.

Stage this hunk [y,n,q,a,d,/,s,e,?]? s

Esta opção fará o git responder com a primeira modificação, isto é, a remoção da primeira linha:

Split into 2 hunks.
@@ -1,1 +1,1 @@
-Linha deletada
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]?

Para adicionar essa modificação selecionamos a opção: “y”

Stage this hunk [y,n,q,a,d,/,s,e,?]? s

Assim, o git adiciona a modificação e apresenta a próxima, no caso a adição das duas linhas:

@@ -2,2 +1,3 @@
+Primeira linha adicionada
+Segunda linha adicionada
Stage this hunk [y,n,q,a,d,/,K,g,e,?]?

A adição das duas linhas podem ser divididas, mas neste caso, não irei adicionar essa modificação. Para sair iremos usar a opção: “q”, para sair da adição interativa do arquivo.txt e depois usar o “q”, de novo, para sair da adição interativa.

Assim, o git adiciona a modificação e apresenta a próxima, no caso a adição das duas linhas:

@@ -2,2 +1,3 @@
+Primeira linha adicionada
+Segunda linha adicionada
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? q

*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now> q
Bye.
$

Feito isso, se você não tiver adicionado todas as diferenças no stage, o git status irá informar que o arquivo arquivo.txt está no stage e está modificado.

Pronto!

Agora temos apenas parte do arquivo adicionado no stage, usando a adição interativa ao stage do git.

Fonte: