Esta versión de GitHub Enterprise se discontinuó el 2021-06-09. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

La confirmación existe en GitHub pero no en mi clon local

Algunas veces una confirmación estará visible en GitHub Enterprise, pero no existirá en tu clon local del repositorio.

Cuando usas git show para ver una confirmación específica en la línea de comando, puedes obtener un error fatal.

Por ejemplo, puedes recibir un error bad object localmente:

$ git show 1095ff3d0153115e75b7bca2c09e5136845b5592
> fatal: bad object 1095ff3d0153115e75b7bca2c09e5136845b5592

Sin embargo, cuando ves la confirmación en tu instancia de servidor de GitHub Enterprise, podrás verla sin problemas:

github.com/$account/$repository/commit/1095ff3d0153115e75b7bca2c09e5136845b5592

Existen varias explicaciones posibles:

  • El repositorio local está desactualizado.
  • La rama que contiene la contiene la confirmación fue eliminada, por lo que ya no se hace referencia a la confirmación.
  • Alguien realizó un empuje forzado sobre la confirmación.

El repositorio local está desactualizado

Es posible que tu repositorio local aún no esté confirmado. Para obtener información desde tu repositorio remoto hasta tu clon local, usa git fetch:

$ git fetch remote

Esto copia información de manera segura desde el repositorio remoto hasta tu clon local sin hacer cambios a los archivos que has revisado. Puedes usar git fetch upstream para obtener información desde un repositorio que has bifurcado o git fetch origin para obtener información desde un repositorio que solo has clonado.

Sugerencia: Para obtener información, lee sobre cómo administrar remotos y extraer datos en el libro Pro Git.

La rama que contenía la confirmación fue eliminada

Si un colaborador del repositorio ha eliminado la rama que contiene la confirmación o ha realizado un empuje forzado sobre la rama, es posible que la confirmación faltante haya quedado huérfana (es decir, no puede ser alcanzado desde cualquier referencia) y, por lo tanto, no se extraerá en tu clon local.

Afortunadamente, si un colaborador tiene un clon local del repositorio con la confirmación faltante, puede volver a forzarla en GitHub Enterprise. Necesitan asegurarse de que la confirmación sea utilizada como referencia por parte de una rama local y que luego la suban como una rama nueva a GitHub Enterprise.

Digamos que la persona todavía tiene una rama local (llamémosla B) que contiene la confirmación. Esto puede realizar el seguimiento de la rama que tuvo un empuje forzado o eliminado y que simplemente todavía no han actualizado. Para preservar la confirmación, pueden subir esa rama local a una rama nueva (llamémosla recover-B) en GitHub Enterprise. Para este ejemplo, supongamos que tienen un remoto denominado ascendente mediante el cual tienen acceso de escritura a github.com/$account/$repository.

La otra persona ejecuta:

$ git branch recover-B B
# Crea una nueva rama local que hace referencia a la confirmación
$ git push upstream B:recover-B
# Sube la B local a la nueva rama ascendente, creando una nueva referencia a la confirmación

Ahora, puedes ejecutar:

$ git fetch upstream recover-B
# Crea la confirmación en tu repositorio local.

Evitar empujes forzados

Evita los empujes forzados a un repositorio a menos que sea absolutamente necesario. Esto es especialmente cierto si más de una persona puede subir al repositorio.

Leer más