Operaciones Básicas de Git para Control de Versiones

Configuración Global de Git

En un entorno nuevo, se debe configurar el espacio de trabajo de Git. Esta configuración se realiza una sola vez y persiste en actualizaciones, pudiendo modificarse según sea necesario.

# Establecer nombre de usuario global
$ git config --global user.name "maria"

# Definir correo electrónico global
$ git config --global user.email "maria@ejemplo.org"

# Revisar configuración actual
$ git config --list
user.email=maria@ejemplo.org
user.name=maria

$ git config user.name 
maria
$ git config user.email 
maria@ejemplo.org

Creación de un Repositorio Git

# Generar un directorio para el proyecto
$ mkdir miProyecto
$ ls
miProyecto
$ cd miProyecto/

# Inicializar el repositorio
$ git init
Repositorio Git vacío inicializado en /home/usuario/miProyecto/.git/

# El directorio .git contiene todos los recursos de Git
$ ls -a
.  ..  .git

Operaciones Fundamentales con Git

Los archivos en el directorio de trabajo pueden estar en dos estados: rastreados o no rastreados. Los archivos rastreados están bajo control de versiones y pueden estar modificados, en área de preparación o sin cambios. Los archivos no rastreados son nuevos y no forman parte del repositorio. Para gestionar cambios, se editan archivos, se añaden al área de preparación y se confirman en el repositorio.

Confirmación y Retroceso de Versiones

Confirmar una Versión

# Crear un archivo de ejemplo
$ echo "datos iniciales" > archivo.txt

# Añadir y confirmar cambios
$ git add archivo.txt
$ git commit -m "primera confirmación"
[rama-principal (confirmación-raíz) a1b2c3d] primera confirmación
 1 archivo cambiado, 1 inserción(+)
 modo de creación 100644 archivo.txt

# Ver historial de confirmaciones
$ git log
commit a1b2c3d4e5f678901234567890abcdef (HEAD -> rama-principal)
Autor: maria <maria>
Fecha:   Lunes 10 Abr 2025 10:30:00 +0000

    primera confirmación
</maria>

Retroceder a una Versión Anterior

# Modificar y confirmar un segundo cambio
$ echo "nueva línea" >> archivo.txt
$ git add .
$ git commit -m "segunda confirmación"

# Mostrar historial
$ git log
commit 9f8e7d6c5b4a32101234567890fedcba (HEAD -> rama-principal)
...
    segunda confirmación

commit a1b2c3d4e5f678901234567890abcdef
...
    primera confirmación

# Retroceder a la versión anterior usando HEAD^
$ git reset --hard HEAD^
HEAD está ahora en a1b2c3d primera confirmación

# Verificar historial y contenido
$ git log
commit a1b2c3d4e5f678901234567890abcdef (HEAD -> rama-principal)
...
    primera confirmación

$ cat archivo.txt
datos iniciales

# Para regresar a la segunda versión, usar reflog
$ git reflog
a1b2c3d HEAD@{0}: reset: moving to HEAD^
9f8e7d6 HEAD@{1}: commit: segunda confirmación
a1b2c3d HEAD@{2}: commit (initial): primera confirmación

# Restaurar la segunda versión
$ git reset --hard 9f8e7d6
HEAD está ahora en 9f8e7d6 segunda confirmación

# Confirmar el estado
$ git log
commit 9f8e7d6c5b4a32101234567890fedcba (HEAD -> rama-principal)
...
    segunda confirmación

$ cat archivo.txt
datos iniciales
nueva línea

HEAD indica la versión actual. HEAD^ se refiere a la versión anterior, y HEAD~n permite retroceder n versiones.

Área de Trabajo, Zona de Preparación y Repositorio

Gestión de Áreas

El área de trabajo es el directorio visible. La zona de preparación almacena cambios listos para confirmar. El repositorio (.git) contiene el historial de versiones. El comando git commit envía cambios de la zona de preparación a la rama principal (master).

# Crear otro archivo
$ echo "texto adicional" > otro_archivo.txt

# Ver estado actual
$ git status
En la rama rama-principal
Archivos no rastreados:
  (use "git add <archivo>..." para incluir en lo que se confirmará)
	otro_archivo.txt

nada para confirmar, archivos no rastreados presentes (use "git add" para rastrearlos)

# Añadir a la zona de preparación
$ git add otro_archivo.txt

$ git status
En la rama rama-principal
Cambios para confirmar:
  (use "git restore --staged <archivo>..." para sacar de la zona de preparación)
	nuevo archivo:   otro_archivo.txt

# Confirmar cambios
$ git commit -m "añadir otro archivo"
[rama-principal e4d5f6g] añadir otro archivo
 1 archivo cambiado, 1 inserción(+)
 modo de creación 100644 otro_archivo.txt

# Estado limpio después de confirmar
$ git status
En la rama rama-principal
nada para confirmar, árbol de trabajo limpio

Gestión de Modificaciones de Archivos

Descartar Cambios en el Área de Trabajo

# Modificar un archivo
$ echo "cambio temporal" >> archivo.txt

# Detectar cambios no preparados
$ git status
En la rama rama-principal
Cambios no rastreados para confirmar:
  (use "git add <archivo>..." para actualizar lo que se confirmará)
  (use "git restore <archivo>..." para descartar cambios en el directorio de trabajo)
	modificado:   archivo.txt

# Restaurar versión original
$ git restore archivo.txt

$ git status
En la rama rama-principal
nada para confirmar, árbol de trabajo limpio

$ cat archivo.txt
datos iniciales
nueva línea

Revertir Cambios en la Zona de Preparación

# Modificar y añadir a la zona de preparación
$ echo "otro cambio" >> archivo.txt
$ git add archivo.txt

$ git status
En la rama rama-principal
Cambios para confirmar:
  (use "git restore --staged <archivo>..." para sacar de la zona de preparación)
	modificado:   archivo.txt

# Sacar de la zona de preparación
$ git reset HEAD archivo.txt
Cambios no rastreados después de reset:
M	archivo.txt

$ git status
En la rama rama-principal
Cambios no rastreados para confirmar:
  (use "git add <archivo>..." para actualizar lo que se confirmará)
  (use "git restore <archivo>..." para descartar cambios en el directorio de trabajo)
	modificado:   archivo.txt

nada para confirmar (use "git add" y/o "git commit -a")

# Descartar cambios del área de trabajo
$ git restore archivo.txt
$ git status
En la rama rama-principal
nada para confirmar, árbol de trabajo limpio

$ cat archivo.txt
datos iniciales
nueva línea

Resumen de Operaciones de Reversión

  • Para descartar cambios no preparados: usar git restore archivo.
  • Para revertir cambios preparados: primero git reset HEAD archivo, luego git restore archivo.
  • Para limpiar completamente y volver a la última confirmación: git reset --hard HEAD.
  • Para retroceder a una versión específica en el historial: git reset --hard HEAD^n o con hash de confirmación.
  • Los archivos nuevos no rastreados no se afectan por git reset --hard.

Comparación de Diferencias

# Diferencias entre área de trabajo y zona de preparación
$ git diff

# Diferencias entre zona de preparación y repositorio
$ git diff --staged

# Diferencias entre área de trabajo y la última confirmación
$ git diff HEAD

# Diferencias entre dos confirmaciones específicas
$ git diff hash1 hash2

# Ejemplo: comparar con HEAD
$ echo "modificación reciente" >> archivo.txt
$ git diff HEAD archivo.txt
diff --git a/archivo.txt b/archivo.txt
index 5678abcd..1234efgh 100644
--- a/archivo.txt
+++ b/archivo.txt
@@ -2,3 +2,4 @@
 nueva línea
 datos iniciales
+modificación reciente

# Comparar dos versiones del historial
$ git log --oneline
9f8e7d6 segunda confirmación
a1b2c3d primera confirmación

$ git diff a1b2c3d 9f8e7d6 archivo.txt
diff --git a/archivo.txt b/archivo.txt
index 5678abcd..1234efgh 100644
--- a/archivo.txt
+++ b/archivo.txt
@@ -1 +1,2 @@
 datos iniciales
+nueva línea

Eliminación de Archivos

Eliminar del Disco y del Repositorio

# Eliminar archivo y registrar en Git
$ git rm otro_archivo.txt
rm 'otro_archivo.txt'

$ git status
En la rama rama-principal
Cambios para confirmar:
  (use "git restore --staged <archivo>..." para sacar de la zona de preparación)
	eliminado:    otro_archivo.txt

# Confirmar eliminación
$ git commit -m "eliminar otro archivo"
[rama-principal h7i8j9k] eliminar otro archivo
 1 archivo cambiado, 0 inserciones(+), 0 eliminaciones(-)
 modo de eliminación 100644 otro_archivo.txt

$ git status
En la rama rama-principal
nada para confirmar, árbol de trabajo limpio

Eliminar del Repositorio pero Mantener en Disco

# Eliminar del control de versiones sin borrar localmente
$ git rm --cached otro_archivo.txt
rm 'otro_archivo.txt'

$ git status
En la rama rama-principal
Cambios para confirmar:
  (use "git restore --staged <archivo>..." para sacar de la zona de preparación)
	eliminado:    otro_archivo.txt

Archivos no rastreados:
  (use "git add <archivo>..." para incluir en lo que se confirmará)
	otro_archivo.txt

# Confirmar para dejar de rastrear
$ git commit -m "dejar de rastrear otro archivo"
[rama-principal l1m2n3o] dejar de rastrear otro archivo
 1 archivo cambiado, 0 inserciones(+), 0 eliminaciones(-)
 modo de eliminación 100644 otro_archivo.txt

$ git status
En la rama rama-principal
Archivos no rastreados:
  (use "git add <archivo>..." para incluir en lo que se confirmará)
	otro_archivo.txt

nada para confirmar, archivos no rastreados presentes (use "git add" para rastrearlos)

# El archivo sigue en el directorio
$ ls
otro_archivo.txt

Movimiento y Renombrado de Archivos

# Renombrar un archivo
$ git mv otro_archivo.txt documento_final.txt

$ git status
En la rama rama-principal
Cambios para confirmar:
  (use "git restore --staged <archivo>..." para sacar de la zona de preparación)
	renombrado:    otro_archivo.txt -> documento_final.txt

# Confirmar el cambio
$ git commit -m "renombrar archivo"
[rama-principal p4q5r6s] renombrar archivo
 1 archivo cambiado, 0 inserciones(+), 0 eliminaciones(-)
 renombrar otro_archivo.txt => documento_final.txt (100%)

# Git mv equivale a:
# mv otro_archivo.txt documento_final.txt
# git rm otro_archivo.txt
# git add documento_final.txt
# Git detecta que el contenido es el mismo y lo marca como renombrado.

Visualización del Historial

# Ver historial completo
$ git log

# Formato conciso
$ git log --oneline

# Mostrar diferencias de las últimas n confirmaciones
$ git log -p -2

Consideraciones sobre el Retroceso

El comando git reset --hard fuerza un retroceso completo, restaurando el repositorio, la zona de preapración y el área de trabajo a la versión objetivo. Todos los cambios en esas áreas se pierden. Los archivos nuevos no rastreados no se ven afectados. Sin la opción --hard, el historial retrocede, pero los archivos modificados permanecen en el área de trabajo en estado no preparado.

Etiquetas: Git control-de-versiones comandos-git configuracion-git repositorios-git

Publicado el 7-4 17:37