En git existen varias maneras para regresar a un estado pasado del proyecto. En este curso hablaremos de tres maneras, “hard”, “soft” y “mixed”. Si se utiliza “soft” (git reset --soft
) para retornar a un punto en específico del proyecto, el mismo lo logra sin disolver el estado actual del proyecto, esto porque no restablece el indice ni la rama de trabajo. Cuando aplicamos este comando todos los archivos pertenecientes a“commits”posteriores a el quedan en“stage”listos para cualquier otra operación que se desee realizar. De forma similar actúa el comando “mixed” (git reset --mixed
), la única diferencia con el comando “soft” es que el los cambios no se quedan en“stage”. Este es el comando por defecto que usa git cuando no se le asigna una bandera (mixed, soft, hard, etc). De ser necesario retornar completamente a un estado pasado, ignorando todos los“commits”que se encuentren por encima (más nuevos) que este, se utilizagit reset --hard
, Este comando particular ignora completamente todos los cambios que hemos realizado ya que restablece el indice y la rama de trabajo al punto donde se encontraban.
Estos tres métodos antes descritos podemos decir que son los “más” populares, ya que a la hora de haber realizado algo realmente errado utilizamos el reset --hard
para retornar al estado anterior descartando todo, y cuando realizamos un mal “commit” ya sea porque el mensaje no nos gustó o agregamos muchos archivos en un solo “commit” empleamosreset --soft
o reset --mixed
.
Hagamos una prueba para observar lo que describimos anteriormente.
12345678 $git lg-6*926a59c-albertogg,31minutes ago:Archivo de prueba para cherry-pick* 08bddd4-albertogg,2weeks ago:Merge commit'4f34bfe8efc8f797bac71dfcd736cb7fa14efc42'as'node_express_subtree'|\|*4f34bfe-albertogg,2weeks ago:Squashed'node_express_subtree/'content from commit0f81501*2614422-albertogg,3weeks ago:Primer commit con un submódulo*de13f1b-albertogg,5weeks ago:Commit planeadoarchivo nuevoyviejo*f2ead5d-albertogg,6weeks ago:Referencia en readme
Nos vamos a devolver hasta el “commit” con el hash “2614422″ empleando los tres métodos. Comenzando por el “soft”.
12345678910111213 $git reset--soft2614422d18$git status# On branch master# Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.# (use "git pull" to update your local branch)## Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: cherry-test.md# new file: node_express_subtree/.gitignore# new file: node_express_subtree/app.js# new file: node_express_subtree/package.json
Podemos observar que toda la información que se encontraba en los “commits” de hash “4f34bfe”, “08bddd4″ y “926a59c” ahora están en el stage nuevamente. Si llegáramos a realizar otro “commit” en este punto cambiaremos el árbol de nuestro proyecto. Ahora probemos con “mixed”.