Como lo había entendido, cuando haces un commit en Git, se hace una instantánea de todo el estado del repository y eso me permite volver a ese estado cuando sea necesario. Entonces, para mí, un compromiso no representa un cambio, sino un estado de un repository. Cuando desee volver a un estado antiguo, puede hacer la git checkout commit-hash
Sin embargo, no entiendo lo que sucede cuando haces una cherry-pick
, porque solo obtiene el cambio realizado por ese compromiso.
¿Cómo puede Git get la diferencia entre dos commits durante un cherry-pick
si un commit representa un estado de un repository completo ?
Su comprensión es correcta: un "compromiso" es que git no es un cambio (delta), sino que representa todo el estado. Pero una confirmación contiene algo más que el estado: también tiene un puntero a una confirmación principal (normalmente una, pero puede ser cualquier número), es decir, la confirmación anterior en el historial del repository.
El puntero padre le permite a git descubrir las diferencias entre la confirmación actual y su padre. Esto es lo que hace cherry-pick: calcula la diferencia, luego aplica solo esas diferencias al estado actual.