Inicio » [SOLUCIONADO] Error 'fatal: cannot lock ref' en Git
Web y Código

[SOLUCIONADO] Error 'fatal: cannot lock ref' en Git

✨ Respuesta Rápida

El error error: cannot lock ref 'refs/remotes/origin/main': is at ... but expected ... o fatal: cannot lock ref ocurre al intentar hacer git pull, git fetch o git checkout cuando el puntero de referencia local de Git se corrompe debido a un cierre inesperado del proceso de Git o a un conflicto entre nombres de ramas con mayúsculas y minúsculas.

El Diagnóstico Rápido

Causa
Archivo de bloqueo de referencia de Git acumulado (.git/refs/heads/X.lock)
Solución
Eliminar el archivo lock sobrante con rm -f .git/refs/heads/nombre-rama.lock
Causa
Múltiples procesos de Git ejecutándose simultáneamente
Solución
Finalizar otros procesos activos de Git o IDEs antes de reintentar el comando

El error error: cannot lock ref 'refs/remotes/origin/main': is at ... but expected ... o fatal: cannot lock ref ocurre al intentar hacer git pull, git fetch o git checkout cuando el puntero de referencia local de Git se corrompe debido a un cierre inesperado del proceso de Git o a un conflicto entre nombres de ramas con mayúsculas y minúsculas.

Solución Rápida (1 Minuto):

  1. Poda las referencias obsoletas del repositorio remoto: git remote prune origin
  2. Si persiste, elimina el archivo lock corrupto: rm -f .git/refs/remotes/origin/main.lock

La Solución Paso a Paso

  1. 1

    Paso 1: Podar referencias remotas (Git Remote Prune)

    En la mayoría de los casos, este error se debe a ramas remotas eliminadas en GitHub/GitLab que siguen existiendo en la caché local:

    BASH
    git remote prune origin
    

    Luego intenta hacer fetch de nuevo:

    BASH
    git fetch origin
    
  2. 2

    Paso 2: Eliminar manualmente el archivo de bloqueo .lock

    Si el comando Git fue interrumpido repentinamente (por un corte de energía o cierre de terminal), Git deja un archivo de bloqueo de seguridad que impide escrituras posteriores:

    BASH
    # Eliminar archivo lock de la rama principal
    rm -f .git/refs/remotes/origin/main.lock
    
    # O eliminar todos los locks de referencias si no estás seguro de cuál es:
    find .git/refs -name "*.lock" -type f -delete
    
  3. 3

    Paso 3: Resolver conflictos de nombres de ramas (Case-Sensitivity)

    Si una rama se llama Feature y otra feature, sistemas de archivos insensibles a mayúsculas (como Windows o macOS por defecto) fallarán al crear los archivos de referencia correspondientes.

    Fuerza la limpieza del embalaje de referencias de Git:

    BASH
    git pack-refs --all --prune
    

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • No fuerces el cierre de la ventana de terminal mientras se ejecuten operaciones de git pull o git push.