Un commit colgante es un commit que no está asociado con la referencia, es decir, no hay forma de alcanzarlo.
Por ejemplo, considere el siguiente diagrama. Supongamos que eliminamos la rama branchX sin fusionar sus cambios, luego commit D se convertirá en un commit colgante porque no hay ninguna referencia asociada con él. Si se hubiera fusionado en maestro, las referencias HEAD y maestra habrían apuntado a confirmar D y ya no estaría colgando, incluso si eliminamos la función X. Lea la nota después del diagrama para comprender esto mejor.
Git recolecta basura automáticamente (es decir, elimina) confirmaciones colgantes. Podemos usar el git reflog
para recuperar una rama (de confirmaciones pendientes) que se eliminó sin fusionarla. Podemos recuperar confirmaciones eliminadas solo si está presente en el almacén de objetos local. Si fue basura recolectada, entonces no podemos recuperarla.
Tenga en cuenta que el nombre de una rama, es decir, la etiqueta de la rama, en realidad es una referencia a la última confirmación de una rama, es decir, la punta de la rama. En el diagrama anterior, featureX, master y HEAD son solo referencias a confirmaciones específicas. Las etiquetas featureX y master se refieren a los últimos commits en sus respectivas sucursales. HEAD generalmente se refiere a la punta de la rama actualmente desprotegida (maestro en este caso). Si comprueba una confirmación anterior en su rama actual, HEAD estará en un estado separado, es decir, señalará la confirmación anterior en lugar de la última. También tenga en cuenta que HEAD se denomina referencia simbólica porque en realidad apunta a la etiqueta de rama actual y cualquier etiqueta de rama siempre apunta a la punta de la rama. Entonces, en circunstancias normales, HEAD señala indirectamente a la última confirmación.
Como comentario adicional, tenga en cuenta que Git representa su gráfico / historial de compromiso como un gráfico acíclico dirigido . Cada confirmación tiene una referencia a él padre. Por lo tanto, las flechas en un diagrama de confirmación apuntan desde la confirmación secundaria a la confirmación primaria. Necesitamos una referencia a la última confirmación secundaria para llegar a las confirmaciones anteriores en una rama.
PD : el diagrama y la comprensión anteriores se obtuvieron de este curso gratuito . Aunque el curso es bastante antiguo, el conocimiento sigue siendo relevante.
git gc
, y 2) no necesito preocuparme por esto porque estos bits colgantes son normales y ya están bien manejarlos?