-
1. Inicio - Sobre el Control de Versiones
-
2. Fundamentos de Git
-
3. Ramificaciones en Git
-
4. Git en el Servidor
- 4.1 Los Protocolos
- 4.2 Configurando Git en un servidor
- 4.3 Generando tu clave pĆŗblica SSH
- 4.4 Configurando el servidor
- 4.5 El demonio Git
- 4.6 HTTP Inteligente
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git en un alojamiento externo
- 4.10 Resumen
-
5. Git en entornos distribuidos
-
6. GitHub
-
7. Herramientas de Git
- 7.1 Revisión por selección
- 7.2 Organización interactiva
- 7.3 Guardado rƔpido y Limpieza
- 7.4 Firmando tu trabajo
- 7.5 Buscando
- 7.6 Reescribiendo la Historia
- 7.7 Reiniciar Desmitificado
- 7.8 Fusión Avanzada
- 7.9 Rerere
- 7.10 Haciendo debug con Git
- 7.11 Submódulos
- 7.12 Agrupaciones
- 7.13 Replace
- 7.14 Almacenamiento de credenciales
- 7.15 Resumen
-
8. Personalización de Git
-
9. Git y Otros Sistemas
- 9.1 Git como Cliente
- 9.2 Migración a Git
- 9.3 Resumen
-
10. Los entresijos internos de Git
-
A1. ApƩndice A: Git en otros entornos
- A1.1 Interfaces grƔficas
- A1.2 Git en Visual Studio
- A1.3 Git en Eclipse
- A1.4 Git con Bash
- A1.5 Git en Zsh
- A1.6 Git en Powershell
- A1.7 Resumen
-
A2. ApƩndice B: Integrando Git en tus Aplicaciones
- A2.1 Git mediante LĆnea de Comandos
- A2.2 Libgit2
- A2.3 JGit
-
A3. ApƩndice C: Comandos de Git
- A3.1 Configuración
- A3.2 Obtener y Crear Proyectos
- A3.3 Seguimiento BƔsico
- A3.4 Ramificar y Fusionar
- A3.5 Compartir y Actualizar Proyectos
- A3.6 Inspección y Comparación
- A3.7 Depuración
- A3.8 Parcheo
- A3.9 Correo Electrónico
- A3.10 Sistemas Externos
- A3.11 Administración
- A3.12 Comandos de FontanerĆa
2.4 Fundamentos de Git - Deshacer Cosas
Deshacer Cosas
En cualquier momento puede que quieras deshacer algo. Aquà repasaremos algunas herramientas bÔsicas usadas para deshacer cambios que hayas hecho. Ten cuidado, a veces no es posible recuperar algo luego que lo has deshecho. Esta es una de las pocas Ôreas en las que Git puede perder parte de tu trabajo si cometes un error.
Uno de las acciones mÔs comunes a deshacer es cuando confirmas un cambio antes de tiempo y olvidas agregar algún archivo, o te equivocas en el mensaje de confirmación.
Si quieres rehacer la confirmación, puedes reconfirmar con la opción --amend
:
$ git commit --amend
Este comando utiliza tu Ôrea de preparación para la confirmación. Si no has hecho cambios desde tu última confirmación (por ejemplo, ejecutas este comando justo después de tu confirmación anterior), entonces la instantÔnea lucirÔ exactamente igual y lo único que cambiarÔs serÔ el mensaje de confirmación.
Se lanzarÔ el mismo editor de confirmación, pero verÔs que ya incluye el mensaje de tu confirmación anterior. Puedes editar el mensaje como siempre y se sobreescribirÔ tu confirmación anterior.
Por ejemplo, si confirmas y luego te das cuenta que olvidaste preparar los cambios de un archivo que querĆas incluir en esta confirmación, puedes hacer lo siguiente:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
Al final terminarÔs con una sola confirmación - la segunda confirmación reemplaza el resultado de la primera.
Deshacer un Archivo Preparado
Las siguientes dos secciones demuestran cómo lidiar con los cambios de tu Ôrea de preparación y tú directorio de trabajo.
Afortunadamente, el comando que usas para determinar el estado de esas dos Ôreas también te recuerda cómo deshacer los cambios en ellas.
Por ejemplo, supongamos que has cambiado dos archivos y que quieres confirmarlos como dos cambios separados, pero accidentalmente has escrito git add *
y has preparado ambos.
¿Cómo puedes sacar del Ôrea de preparación uno de ellos?
El comando git status
te recuerda cómo:
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
Justo debajo del texto āChanges to be committedā (āCambios a ser confirmadosā, en inglĆ©s), verĆ”s que dice que uses git reset HEAD <file>...
para deshacer la preparación.
Por lo tanto, usemos el consejo para deshacer la preparación del archivo CONTRIBUTING.md
:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
El comando es un poco raro, pero funciona.
El archivo CONTRIBUTING.md
esta modificado y, nuevamente, no preparado.
Nota
|
|
Por ahora lo Ćŗnico que necesitas saber sobre el comando git reset
es esta invocación mÔgica. Entraremos en mucho mÔs detalle sobre qué hace reset
y cómo dominarlo para que haga cosas realmente interesantes en Reiniciar Desmitificado.
Deshacer un Archivo Modificado
¿Qué tal si te das cuenta que no quieres mantener los cambios del archivo CONTRIBUTING.md
?
¿Cómo puedes restaurarlo fÔcilmente - volver al estado en el que estaba en la última confirmación (o cuando estaba recién clonado, o como sea que haya llegado a tu directorio de trabajo)?
Afortunadamente, git status
también te dice cómo hacerlo.
En la salida anterior, el Ć”rea no preparada lucĆa asĆ:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
AllĆ se te indica explĆcitamente como descartar los cambios que has hecho. Hagamos lo que nos dice:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Ahora puedes ver que los cambios se han revertido.
Importante
|
Es importante entender que |
Para mantener los cambios que has hecho y a la vez deshacerte del archivo temporalmente, hablaremos sobre cómo esconder archivos (stashing, en inglés) y sobre ramas en [ch03-git-branching]; normalmente, estas son las mejores maneras de hacerlo.
Recuerda, todo lo que estƩ confirmado en Git puede recuperarse.
Incluso commits que estuvieron en ramas que han sido eliminadas o commits que fueron sobreescritos con --amend
pueden recuperarse (véase Recuperación de datos para recuperación de datos).
Sin embargo, es posible que no vuelvas a ver jamƔs cualquier cosa que pierdas y que nunca haya sido confirmada.