Librebits - jordila_@i-ching:~/

Bits aleatorios de Software Libre / Libre Software ...

Git : Diff Y Deshacer Cambios Recientes Fácilmente

De forma sencilla puedo visualizar de forma coloreada, los últimos cambios introducidos, línea por línea… (atención a los signos + y – qye las preceden)

1
$ git diff

En la práctica. Pongamos que modifico el epígrafe/‘caption’ de una de las imágenes…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
jordi@i-ching:~/Git/www.p-i_a$ emacs -nw carousel-blueimp.html //introduzco los cambios desde Emacs
jordi@i-ching:~/Git/www.p-i_a$ git diff
diff --git a/carousel-blueimp.html b/carousel-blueimp.html
index 29ec038..d10e219 100644
--- a/carousel-blueimp.html
+++ b/carousel-blueimp.html
@@ -117,7 +117,7 @@
             </div>
           </div>
           <div class="item">
-            <img src="img/El Campo de Hielo Sur desde el Marconi_1200x800px.JPG" alt="El Campo de Hielo Sur desde el Marconi" />
+            <img src="img/El Campo de Hielo Sur desde el Marconi_1200x800px.JPG" alt="El Campo de Hielo Sur desde el Marconi. Vista Aérea" 
             <div class="carousel-caption">
                 <p>El Campo de Hielo Sur desde el Marconi</p>
             </div>
(END)

Y luego, por lo que sea, quiero volver a la versión anterior al cambio. La forma más sencilla :

1
$git checkout -- carousel-blueimp.php

NOTA : la opción — indica la permanencia en la rama (‘branch’) actual de trabajo.

Si lo que ocurre es que ya había posicionado el fichero en cuestión en el área de ‘stage’ (el limbo git) tras un commit … y todo y con eso quiero deshacer los últimos cambios realizados : que no cunda el pánico!

Secuencia anterior con ‘staging’ .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
jordi@i-ching:~/Git/www.p-i_a$ emacs -nw carousel-blueimp.html //introduzco los cambios desde Emacs
jordi@i-ching:~/Git/www.p-i_a$ git diff
diff --git a/carousel-blueimp.html b/carousel-blueimp.html
index 29ec038..d10e219 100644
--- a/carousel-blueimp.html
+++ b/carousel-blueimp.html
@@ -117,7 +117,7 @@
             </div>
           </div>
           <div class="item">
-            <img src="img/El Campo de Hielo Sur desde el Marconi_1200x800px.JPG" alt="El Campo de Hielo Sur desde el Marconi" />
+            <img src="img/El Campo de Hielo Sur desde el Marconi_1200x800px.JPG" alt="El Campo de Hielo Sur desde el Marconi. Vista Aérea" 
             <div class="carousel-caption">
                 <p>El Campo de Hielo Sur desde el Marconi</p>
             </div>
(END)

jordi@i-ching:~/Git/www.p-i_a$ git commit -am carousel-blueimp.html "introduzco los cambios en el área 'staging'"

jordi@i-ching:~/Git/www.p-i_a$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

Si leemos atentamente, cosa que no suele ocurrir con frecuencia en la línea de comandos, nos percataremos de que Git se anticipa a la siguiente acción :

  • para extraer el fichero modificado del área de ‘staging’, usar _git reset

Se puede desandar lo andado faćilmente, como nos indican :

1
jordi@i-ching:~/Git/www.p-i_a$ git reset HEAD -- carousel-blueimp.html 

Voilà! Volvimos a la situación anterior: recordemos que los cambios desaparecieron del área ‘staging’ de Git, pero siguen presentes en el área de trabajo. Si queremos deshacer por completo el cambio, volviendo el fichero a su estado original: no tenemos más que ejecutar la operativa mencionada al principio de este post.

KISS ‘Keep-It-Simple-Stupid’