Introducción
Git stash es una función poderosa que permite a los desarrolladores guardar temporalmente los cambios no confirmados y cambiar entre diferentes tareas. Este tutorial ofrece una visión integral sobre cómo resolver conflictos de fusión cuando se trabaja con Git stash, ayudando a los desarrolladores a gestionar eficazmente los cambios de código y mantener un flujo de trabajo de desarrollo limpio y organizado.
Conceptos básicos de Git Stash
¿Qué es Git Stash?
Git stash es una función poderosa que permite a los desarrolladores guardar temporalmente los cambios no confirmados sin comprometerlos en el repositorio. Esto es especialmente útil cuando necesitas cambiar de rama (branch) o extraer actualizaciones, pero tienes trabajo en progreso que no está listo para ser confirmado.
Comandos clave de Stash
| Comando | Descripción |
|---|---|
git stash |
Guarda los cambios del directorio de trabajo actual |
git stash list |
Muestra todos los stashes almacenados |
git stash apply |
Aplica el stash más reciente |
git stash pop |
Aplica y elimina el stash más reciente |
git stash drop |
Elimina el stash más reciente |
Flujo de trabajo básico
graph LR
A[Working Directory] -->|git stash| B[Stash Area]
B -->|git stash pop| A
B -->|git stash apply| A
Ejemplo práctico
## Create some changes
echo "Temporary work in progress" > temp.txt
## Stash the changes
git stash
## Switch branches or perform other tasks
git checkout another-branch
## Return and apply stashed changes
git stash pop
Cuándo usar Git Stash
- Cambiar de rama con cambios no confirmados
- Pausar el trabajo actual para abordar tareas urgentes
- Limpiar temporalmente el directorio de trabajo
Mejores prácticas
- Utiliza mensajes descriptivos con
git stash save "description" - Limpia regularmente la lista de stashes
- No confíes en stash para el almacenamiento a largo plazo de código
LabEx recomienda dominar las técnicas de stash para mejorar la eficiencia del flujo de trabajo de desarrollo.
Descripción general de los conflictos de fusión
Comprender los conflictos de fusión
Los conflictos de fusión ocurren cuando Git no puede resolver automáticamente las diferencias entre dos confirmaciones (commits). Esto suele suceder cuando:
- La misma parte de un archivo se modifica de diferentes maneras en dos ramas (branches)
- Se realizan cambios en la misma línea o en líneas de código cercanas
Visualización de conflictos
graph TD
A[Branch A] -->|Modify Same Line| C{Merge Conflict}
B[Branch B] -->|Modify Same Line| C
C -->|Manual Resolution| D[Merged Code]
Escenarios comunes de conflictos
| Escenario | Descripción |
|---|---|
| Modificación de línea | Cambios diferentes en la misma línea |
| Eliminación de archivo | Una rama elimina, otra modifica |
| Cambio de nombre de archivo | Conflictos en la estructura de archivos |
Marcadores de conflicto
Cuando ocurre un conflicto, Git marca el archivo con marcadores especiales:
<<<<<<< HEAD
Current branch code
=======
Incoming branch code
>>>>>>> branch-name
Detección de conflictos
## Attempt to merge branches
git merge feature-branch
## If conflict occurs
## Conflict files will be marked with conflict markers
Estrategias de resolución
- Edición manual
- Uso de herramientas de fusión
- Elección de cambios específicos
Ejemplo práctico
## Create conflicting changes
echo "Original content" > file.txt
git add file.txt
git commit -m "Initial commit"
## Create two branches with different modifications
git checkout -b branch-a
echo "Branch A modification" > file.txt
git commit -am "Branch A change"
git checkout main
git checkout -b branch-b
echo "Branch B modification" > file.txt
git commit -am "Branch B change"
## Attempt merge (will cause conflict)
git merge branch-a
Mejores prácticas
- Comunicarse con los miembros del equipo
- Extraer (pull) cambios con frecuencia
- Usar mensajes de confirmación claros
LabEx recomienda desarrollar un enfoque sistemático para manejar eficientemente los conflictos de fusión.
Resolución de conflictos de stash
Comprender los conflictos de fusión de stash
Los conflictos de fusión de stash ocurren cuando la aplicación de un cambio guardado en stash a un directorio de trabajo modificado crea modificaciones incompatibles.
Flujo de trabajo de resolución de conflictos
graph TD
A[Stash Changes] --> B{Apply Stash}
B -->|Conflict Detected| C[Manual Resolution]
C --> D[Resolve Conflicts]
D --> E[Commit Changes]
Pasos detallados de resolución
1. Identificar conflictos
## Apply stash and detect conflicts
git stash apply
## View conflict status
git status
2. Marcadores de conflicto
<<<<<<< Updated upstream
Current branch changes
=======
Stashed changes
>>>>>>> Stash changes
Estrategias de resolución
| Estrategia | Descripción | Comando |
|---|---|---|
| Edición manual | Editar directamente los archivos conflictivos | Edición manual |
| Mantener stash | Utilizar completamente los cambios guardados en stash | git checkout --patch |
| Descartar stash | Rechazar los cambios guardados en stash | git reset HEAD |
Ejemplo práctico de resolución
## Create stash with changes
git stash save "Experimental changes"
## Apply stash with potential conflicts
git stash apply
## Manually resolve conflicts in files
nano conflicted_file.txt
## Mark conflicts as resolved
git add conflicted_file.txt
## Complete merge
git commit -m "Resolved stash merge conflicts"
Manejo avanzado de conflictos
Uso de herramientas de fusión visuales
## Configure merge tool
git config --global merge.tool vscode
## Resolve conflicts visually
git mergetool
Mejores prácticas
- Confirmar (commit) o guardar en stash los cambios antes de cambiar de rama
- Utilizar mensajes descriptivos para los stash
- Limpiar regularmente la lista de stash
- Comunicarse con el equipo sobre el trabajo en progreso
Errores comunes
- Perder trabajo durante la resolución de conflictos
- Resolución incompleta de conflictos
- Sobrescribir cambios importantes
LabEx recomienda practicar la resolución de conflictos de stash en un entorno seguro para ganar confianza y habilidades.
Resumen
Comprender cómo resolver los conflictos de fusión de stash es fundamental para mantener un flujo de trabajo de Git fluido. Al dominar las técnicas de resolución de conflictos, los desarrolladores pueden gestionar con confianza los cambios de código, minimizar las interrupciones y garantizar un control de versiones sin problemas en diferentes ramas (branches) y etapas del proyecto.



