lab 16 Deshacer Cambios Confirmados (Committed)

Metas

Deshacer Commits 01

Algunas veces se da cuenta que el cambio que ya está confirmado era incorrecto y desea deshacer ese Commit. Hay varias formas de manejar este asunto, y la manera en que vamos a usar en este laboratorio siempre es segura.

Esencialmente desharemos el Commit al crear un nuevo Commit que retorne el cambio no deseado.

Cambie el archivo y haga el Commit. 02

Cambie el archivo hello.rb con lo siguiente.

Archivo: hello.rb

# This is an unwanted but committed change
name = ARGV.first || "World"

puts "Hello, #{name}!"

Ejecute:

git add hello.rb
git commit -m "Oops, we didn't want this commit"

Crear y Revertir Commit 03

Para deshacer el cambio confirmado, necesitamos generar un commit que quite los cambios introducidos en nuestro Commit no deseado.

Ejecute:

git revert HEAD

Esto hará aparecer el editor. Puede editar el mensaje por defecto del Commit o dejarlo como está. Guarde y cierre el archivo. Debería ver …

Salida:

$ git revert HEAD --no-edit
[master 9ad227a] Revert "Oops, we didn't want this commit"
 1 files changed, 1 insertions(+), 1 deletions(-)

Debido a que estamos deshaciendo el último Commit que hicimos, podemos usar HEAD como el argumento a revertir. Podemos revertir arbitrariamente cualquier Commit en el historial simplemente al especificar su hash.

Nota: El parámetro --no-edit en la salida puede ser ignorado. Esto es necesario para generar la salida sin abrir el editor.

Revise el log 04

Al revisar el log nos muestra ambos Commit, el no deseado y el Commit paa revertir los cambios en nuestro repositorio.

Ejecute:

git hist

Salida:

$ git hist
* 9ad227a 2012-03-06 | Revert "Oops, we didn't want this commit" (HEAD, master) [Jim Weirich]
* d20d016 2012-03-06 | Oops, we didn't want this commit [Jim Weirich]
* 4054321 2012-03-06 | Added a comment (v1) [Jim Weirich]
* 1b754e9 2012-03-06 | Added a default value (v1-beta) [Jim Weirich]
* 3053491 2012-03-06 | Using ARGV [Jim Weirich]
* 3cbf83b 2012-03-06 | First Commit [Jim Weirich]

Esta técnica funcionará con cualquier commit (aunque puede que tenga que resolver conflictos). Es seguro de usar aún en ramas que están públicamente compartirdas en repositorios remotos.

A Continuación 05

Como siguiente paso, veremos una técnica que puede ser usada para quitar los Commits más recientes del repositorio público.

Tabla de Contenidos