Operaciones avanzadas de Git

Una vez que domines las operaciones básicas de Git, las operaciones avanzadas te ayudarán a gestionar y optimizar tu repositorio de código de manera más eficiente.

A continuación se presentan algunas operaciones avanzadas comunes y sus explicaciones detalladas:

  • Staging interactivo: selecciona por bloques los cambios que se van a preparar, controlando con precisión el contenido de los commits.
  • Git Stash: guarda temporalmente el progreso del trabajo, lo que facilita el cambio de tareas.
  • Git Rebase: mueve los cambios de una rama a otra, manteniendo un historial de commits lineal.
  • Git Cherry-Pick: selecciona un commit específico y lo aplica a la rama actual.

1. Staging interactivo (Interactive Staging)

git addEl comando permite añadir de forma selectiva archivos o partes de archivos al área de preparación; esto es muy útil cuando se manejan cambios complejos.

  • Usogit add -p: selecciona por bloques los cambios que se van a preparar.
git add -p

Después de ejecutar este comando, Git mostrará los cambios del archivo por bloques, y puedes elegir si preparar cada bloque. Las opciones comunes incluyen:

  • y: preparar el bloque actual
  • n: omitir el bloque actual
  • s: dividir el bloque actual
  • e: editar manualmente el bloque actual
  • q: salir del modo de preparación

2. Git Stash: guardar temporalmente el progreso de trabajo

git stashEl comando te permite guardar temporalmente los cambios del directorio de trabajo actual, de modo que puedas cambiar a otra rama o realizar otras tareas.

Guardar el progreso de trabajo actual:

git stash

Ver el progreso almacenado:

git stash list

Aplicar el progreso almacenado más reciente:

git stash apply

Aplicar y eliminar el progreso almacenado más reciente:

git stash pop

Eliminar un stash específico:

git stash drop stash@{n}

Vaciar todos los stashes:

git stash clear

3. Git Rebase: cambiar de base

git rebaseEl comando se utiliza para mover los cambios de una rama a otra. Ayuda a mantener un historial de commits lineal y reduce los conflictos al fusionar.

Hacer rebase de la rama actual sobre la rama especificada:

git rebase <branchname>

Por ejemplo, para hacer rebase de la rama actual sobremainla rama:

git rebase main
  • Rebase interactivo:
git rebase -i <commit>

El rebase interactivo te permite editar, eliminar o fusionar commits durante el proceso de rebase. Las opciones comunes incluyen:

  • pick: conservar el commit
  • reword: modificar el mensaje del commit
  • edit: editar el commit
  • squash: fusionar el commit actual con el anterior
  • fixup: fusionar el commit actual con el anterior sin conservar el mensaje del commit
  • drop: eliminar el commit

4. Git Cherry-Pick: seleccionar commits

git cherry-pickEl comando te permite seleccionar un commit específico y aplicarlo a la rama actual. Es muy útil cuando necesitas trasladar cambios específicos de una rama a otra.

Seleccionar un commit:

git cherry-pick <commit>

Por ejemplo,abc123aplicar el commit a la rama actual:

git cherry-pick abc123

Manejo de conflictos de cherry-pick: si surgen conflictos durante el cherry-pick, después de resolverlos usagit cherry-pick --continuepara continuar con el cherry-pick.

Ejemplos de operaciones

A continuación se muestra un ejemplo completo que ilustra cómo usar estas operaciones avanzadas:

Staging interactivo:

git add -p

Guardar el progreso de trabajo:

git stash

Ver el progreso almacenado:

git stash list

Aplicar el progreso almacenado:

git stash apply

Hacer rebase de la rama actual sobremainla rama:

git rebase main

Rebase interactivo, editar el historial de commits:

git rebase -i HEAD~3

Editar el historial de commits, como fusionar y renombrar commits.

Hacer cherry-pickfeatureun commit específico de la rama amainla rama:

git checkout main
git cherry-pick abc123
Otras extensiones