Seguir la twig de git a partir de una confirmación específica

Supongamos que tengo 2 twigs. Quiero que una twig rastree otra twig a partir de una confirmación específica, de modo que cuando hay nuevas confirmaciones en la twig que se está rastreando, las confirmaciones antiguas no se fusionen en la twig de seguimiento.

¿Es posible hacerlo en git? Mi problema es que no quiero tener algunas confirmaciones antiguas en una nueva sucursal, pero necesito get nuevas confirmaciones automáticamente desde otra sucursal, excluyendo algunas de las confirmaciones anteriores.

Los nombres de las sucursales son solo loggings que almacenan una identificación de compromiso.

Lo que está solicitando aquí es almacenar un identificador de compromiso específico bajo un nombre, y luego, comparar el ID de compromiso de otro nombre de twig con el ID de compromiso guardado. Esto es precisamente lo que hacen las twigs y las tags: son nombres para identificaciones de compromiso.

La única diferencia real entre un nombre de twig y un nombre de label es que el nombre de una twig está diseñado para moverse , y de hecho se mueve automáticamente cuando uno está "en" esa twig y realiza confirmaciones:

o--o <-- branch1 / ...--o--o--o <-- HEAD -> branch2 ^ | \-------- tag: tagX 

Aquí HEAD apunta a branch2 , lo que significa que estás en la twig branch2 : has hecho git checkout branch2 recientemente.

Ahora, si realiza una nueva confirmación (marquemos esta con * lugar de o ), el gráfico se convierte en:

  o--o <-- branch1 / ...--o--o--o--* <-- HEAD -> branch2 ^ | \-------- tag: tagX 

Observe cómo la label no se ha movido.

Si usamos un nombre de twig, en lugar de un nombre de label, aún así no se mueve. Vamos a rebobinar a antes de la nueva confirmación, y dibujar esto como:

  o--o <-- branch1 / ...--o--o--o <-- branchX, HEAD -> branch2 

Ahora hacemos el nuevo compromiso. Como estamos en la twig branch2 , y no en branchX , solo branch2 cambia. Así que dibujaré esto de forma un poco diferente para ajustarme a las flechas de las twigs:

  o--o <-- branch1 / ...--o--o--o <-- branchX \ * <-- HEAD -> branch2 

Tenga en count que este es precisamente el mismo gráfico que con la label: simplemente he dibujado la flecha de la label de forma diferente, para dar a entender que la flecha de la label está más cerca de la confirmación (porque las tags nunca se supone que cambien, mientras que las twigs se suponen) cambiar).

Por lo tanto, todo lo que necesita hacer aquí es crear un nombre (nombre de sucursal o label), apuntando al compromiso específico que desea recordar:

 git branch branchX <commit-ID> 

o:

 git tag tagX <commit-ID> 

¿Cuál debería usar, label o twig? Eso depende de si desea moverlo y si desea que otras personas lo compartan o cómo lo desean. Las tags nunca se supone que se muevan, y son bastante globales: otras personas que clonan su repository obtienen, como sus tags, sus tags. Se supone que las sucursales se mueven, y no son tan globales: otras personas que clonan su repository obtienen sus twigs, pero como nombres de origin/* , no como sus nombres de twig.

(Si no desea ninguno de estos elementos, si desea que el nombre no se mueva, pero también que no sea global, por ejemplo) puede devise su propio espacio de nombres. Las twigs y las tags están integradas, y Git sabe qué para hacer con ellos. Si inventas tu propio espacio de nombres de reference, Git no sabrá cómo trabajar con él, por lo que tendrás que trabajar más).