Cómo resolver conflictos de fusión de stash

GitGitBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") subgraph Lab Skills git/status -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/commit -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/diff -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/reset -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/stash -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/branch -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/checkout -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} git/merge -.-> lab-418260{{"Cómo resolver conflictos de fusión de stash"}} end

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

  1. Utiliza mensajes descriptivos con git stash save "description"
  2. Limpia regularmente la lista de stashes
  3. 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

  1. Edición manual
  2. Uso de herramientas de fusión
  3. 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

  1. Confirmar (commit) o guardar en stash los cambios antes de cambiar de rama
  2. Utilizar mensajes descriptivos para los stash
  3. Limpiar regularmente la lista de stash
  4. 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.