HOWTO · Git

Cómo extraer un commit específico de un repositorio Git

Este artículo explica cómo aplicar, inspeccionar, fusionar o restablecer un commit específico de un repositorio Git remoto, con comandos claros y recomendaciones de seguridad.

En esta página

Para aplicar los cambios de un solo commit a la rama actual, obtén el historial remoto con git fetch y usa git cherry-pick <commit-id>. Crea una rama en ese commit si quieres inspeccionar su estado histórico o continuar el trabajo desde allí. Usa git merge o git pull cuando quieras integrar el historial de una rama, que también puede incluir commits anteriores. Usa git reset solo si quieres mover la rama actual a un punto anterior.

Elige la operación adecuada para un commit específico

Estas operaciones producen resultados distintos. git cherry-pick aplica el cambio introducido por un commit seleccionado como un commit nuevo en la rama actual. Crear una rama en un commit permite empezar a trabajar desde esa instantánea. Fusionar un commit incorpora el historial al que da acceso y que todavía no está en la rama actual. git pull obtiene cambios de un remoto y los integra según el comportamiento configurado. git reset mueve la referencia de la rama actual; --hard también reemplaza el árbol de trabajo y el índice. Elige según necesites aplicar un solo cambio, partir de un estado histórico, integrar historial remoto o devolver una rama a un punto anterior.

Busca el hash de un commit

Ejecuta git log para ver los identificadores, autores y mensajes de los commits. Para obtener una lista compacta, usa git log --oneline. Copia el identificador que aparece para el commit deseado; Git acepta tanto un identificador abreviado inequívoco como el identificador completo del objeto. Si el commit solo existe en un remoto, primero obtén los cambios con git fetch origin y luego consulta el historial actualizado. Sustituye origin por el nombre de tu remoto y <commit-id> por el identificador elegido.

Aplica un commit con git cherry-pick

Obtén la rama remota o sus objetos y luego aplica el commit seleccionado con git fetch origin, seguido de git cherry-pick <commit-id>. Esta es la opción directa si quieres aplicar el cambio de un solo commit sin fusionar una rama completa. El ejemplo local siguiente crea un commit en una rama de trabajo y lo aplica a main:

repo=$(mktemp -d)
trap 'rm -rf "$repo"' EXIT
git -C "$repo" init -q -b main
git -C "$repo" config user.name "Example User"
git -C "$repo" config user.email "example@example.com"
printf 'base\n' > "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add notes"
git -C "$repo" switch -q -c topic
printf 'one change\n' >> "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add one change"
commit_id=$(git -C "$repo" rev-parse HEAD)
git -C "$repo" switch -q main
git -C "$repo" cherry-pick "$commit_id"
printf 'Applied one commit to main.\n'
[main 5ede2b1] Add one change
 Date: Mon Oct 26 03:50:14 2026 +0000
 1 file changed, 1 insertion(+)
Applied one commit to main.

Si hay conflictos, resuelve los archivos marcados, prepara las resoluciones con git add y continúa con git cherry-pick --continue. Para cancelar y volver al estado anterior a la operación, usa git cherry-pick --abort. Completa o cancela la operación antes de iniciar otra.

Crea una rama en un commit específico

Para inspeccionar un commit o trabajar a partir de él sin mover la rama actual, obtén los cambios remotos y ejecuta git checkout -b review-branch <commit-id>. Esto crea la rama review-branch en ese commit y cambia a ella. La rama contiene el historial de ese commit; no incluye automáticamente los commits posteriores de otra rama, a menos que los fusiones o los apliques con cherry-pick.

Obtén y fusiona un commit de un remoto

Ejecuta git fetch origin para actualizar las referencias de seguimiento remoto sin integrarlas. Después, usa git merge <commit-id> para fusionar el commit seleccionado y el historial al que da acceso que falte en la rama actual. Esto puede incorporar commits antecesores, por lo que no equivale a aplicar solo el cambio seleccionado. Usa git log --oneline --graph --decorate para revisar el historial resultante.

Usa git pull con un hash de commit

Un remoto puede permitir obtener un identificador de commit directamente si el objeto está disponible y el servidor acepta la solicitud. La compatibilidad varía, así que git pull origin <commit-id> no es una forma portable de seleccionar un solo cambio. Si se acepta, git pull obtiene e integra los cambios según la configuración; no significa «aplicar solo este commit». Para aplicar un solo cambio, obtén los cambios y usa cherry-pick. En los demás casos, obtén una rama con nombre y usa git pull o git merge con esa rama.

Restablece una rama a un commit específico

Usa git reset --hard <commit-id> solo si quieres mover la rama actual y reemplazar el índice y el árbol de trabajo con el estado de ese commit. Puede descartar los cambios sin confirmar. Si después publicas la rama movida, tus colaboradores quizá tengan que conciliar el historial compartido reescrito. Comprueba git status y conserva cualquier trabajo que necesites antes de restablecerla. Para deshacer cambios de forma más segura y conservar el historial publicado, usa git revert <commit-id> para crear un commit nuevo que revierta el cambio seleccionado.

Preguntas frecuentes

¿Cómo encuentro el identificador de un commit? Usa git log o git log --oneline; si el commit solo está disponible en un remoto, obtén primero sus cambios.

¿Qué hago si cherry-pick informa de conflictos? Resuelve y prepara cada archivo, y luego ejecuta git cherry-pick --continue; para cancelar, usa git cherry-pick --abort.

¿Puedo aplicar varios commits con cherry-pick? Sí. Pasa varios identificadores a git cherry-pick en el orden deseado, o usa un rango de commits después de comprobar qué extremos incluye.

¿Reset y revert son lo mismo? No. git reset mueve la referencia de la rama y puede reemplazar archivos locales; git revert registra un commit nuevo que deshace un cambio anterior.