Git
Chapters ▾ 2nd Edition

7.2 Herramientas de Git - Organización interactiva

Organización interactiva

El git viene con unos cuantos scripts que hace que algunas líneas de comando sean más fáciles de usar. Aquí, Veras unos cuantos comandos interactivos que te ayudaran a preparar tus confirmaciones para incluir solo ciertas combinaciones y partes de los archivos. Estás herramientas serán muy útiles si modificas unos cunatos archivos y decides que quieres esos cambios estén en varias confirmaciones enfocadas más que en una gran problemática confirmación. De esta manera, puede asegurarse de que sus confirmaciones sean conjuntos de cambios lógicamente separados y que puedan ser revisados fácilmente por los desarrolladores que trabajan con usted. Si empiezas git add con el -i o la opción --interactive , Git entra en un modo de celda interactiva, mostrando algo como esto:

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

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

Puedes ver que este comando te muestra una muy diferente vista de tu área de ensayo – básicamente la misma informacion que con el with git status pero un poco más sucinto e informativo. Muestra los cambios que haz realizado en la izquierda y cambios que no haz hecho a la derecha.

Después de esto viene una sección de comandos. Aquí puedes hacer un sin número de cosas, incluidos los archivos organizados, archivos sin organizar, partes de archivos organizados, agregar archivos sin seguimiento y ver las diferencias de lo que se ha modificado.

Organizar y desorganziar archivos

Si tecleas 2 o u en el What now> rápidamente, la secuencia de comandos le solicita los archivos que desea representar:

What now> 2
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Para organizar los archivos de TODO and index.html , puedes teclear los números:

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

El * después de cada archivo significa que el archivo fue seleccionado para ser organizado. Si presionas Enter después de no escribir nada en el Update>> rapidamente, Git toma cualquier cosa seleccionada y la organiza por ti:

Update>>
updated 2 paths

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 1
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Ahora puedes ver que los archivos de TODO and index.html han sido organizados y el archivo simplegit.rb aun está sin organizar. If you want to unstage the TODO file at this point, you use the 3 or r (for revert) option:

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 3
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path

Mirando el estatus de tu Git de nuevo, puedes ver que haz desordenado el archivo de TODO:

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Para ver la diferencia de lo que ya haz ordenado, puedes usar el 6 o d (para diferente) comando. Este te muestra una lista de tus archivos organziados, y puedes seleccionar aquellos que quisieras ver la diferencia de su organización. Esto es como especificar el git diff --cached en la línea de comando:

*** 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:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script type="text/javascript">

Con estos comandos básicos,puedes usar el modo de añadir interactivo para tratar con su área de organización un poco más fácilmente.

Parches de organización

De igual manera es posible para el Git el organizar ciertas partes de archivos y no todos los demás. Por ejemplo, Si haces dos simples cambios en tu archivo simplegit.rb y quieres organizar uno pero no el otro, hacer esto es muy fácil en Git. Desde el prompt interactivo, teclea 5 o p (para parche). Git te preguntará que archivos quieres organizar parcialmente; entonces, para cada sección de los archivos seleccionados, mostrará bloques del archivo diferencial y te preguntará si quisierás organizarlos, uno por uno:

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?

Tienes muchas opciones en este punto. Teclear ? te mostrará una lista de lo que puedes hacer:

Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

Generalmente, teclearías y o n Si quisieras organizar cada bloque, pero organizar cada uno de ellos en ciertos archivos o saltarte una decisión para algún bloque puede ser de ayuda para más tarde también. Si organizas una parte del archivo y dejas la otra partida sin organizar, su salida de estado se verá así:

What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb

El estatus del archivo simplegit.rb es interesante. Te muestra que un par de líneas están organizadas y otro par está desorganizado. Has organizado parcialmente este archivo. En este punto, puede salir del script de adición interactivo y ejecutar git commit para confirmar los archivos parcialmente organiazdos.

De igual manera no necesitas estar en el modo de adición interactivo para hacer el parcial - organización de archivos – Puedes iniciar el mismo script usando git add -p o git add --patch en la línea de comando.

Además, puede usar el modo de parche para restablecer parcialmente los archivos con el comando reset --patch , para verificar partes de archivos con el comando checkout --patch y para esconder partes de archivos con el comando stash save --patch. Vamos a entrar en más detalles sobre cada uno de estos a medida que accedemos a usos más avanzados de estos comandos.