Saltar temporalmente una confirmación en el submodule

Supongamos que un module de seguimiento de Git existente (M) confirma commit M1-M2-M3.

Tengo un repository de Git para la Aplicación (A), con commits A1-A2-A3. El repository tiene M incluido como un submodule (el submodule git submodule add URL DIRECTORY ), pero no está actualizado con M; en su lugar, usa un compromiso M1 anterior ( subproject commit 187cac115b5f4fdeb39c25c79e882d30ee9624be ).

Mi problema es este: quiero usar el contenido de commit M3, pero durante un time no debo usar commit M2. Esta limitación pasará eventualmente, pero por el momento es insuperable. ¿Entonces cuales son mis opciones?

Si M no fuera un submodule sino una twig de A, sería fácil:

  1. Cherry-pick M3 en A3, formando A4.
  2. Cuando pase la limitación en M2, combine M3 en A4.

Con el submodule, no sé. La única solución "directa" que puedo pensar involucra los siguientes pasos:

  1. Crea una twig B en M1.
  2. Cherry-pick M3 en B, formando M4.
  3. Combina B en M3, formando M5.
  4. Presione M en su repository.
  5. En A, actualización M.
  6. En A, pago y envío M4.
  7. Cuando pase la limitación en M2, revise M5.

Sin embargo, esto implica cambios en M que dependen en gran medida de la voluntad del propietario de M de aceptarlos, lo que no tiene ningún motivo real (ya que los cambios no aportan nada más que una complejidad adicional a M). Preferiría una solución donde no tenga que imponer tanto a M.

Hay una solución indirecta, tal vez:

  1. Crea una twig B en M3.
  2. Reverse-commit M2 en B, formando M4.
  3. Presione M en su repository.
  4. En A, actualización M.
  5. En A, pago y envío M4
  6. Cuando pase la limitación en M2, revise M3.

Esto es mucho less invasivo en M, lo cual es bueno. Sin embargo, deja la twig B sin fusionar para siempre, lo cual considero una situación muy mala (ya que utilizo una list de twigs no fusionadas como una especie de "list de tareas pendientes").

¿Cuál es la mejor manera de manejar esta situación?

Gracias.

Puede evitar tener twigs no fusionadas borrándolas cuando ya no las necesite.

Creo que su primera solución es extraña, ya que M5 es una combinación que básicamente no tiene ningún valor agregado. Contamina el historial de tu versión.

Lo que yo haría es:

  1. Crea una twig B en M1.
  2. Escoja Cherry M3 en B, formando M4.
  3. Empuje B al repository
  4. En A, pago y envío M4.
  5. Cuando pase la limitación en M2, old_something M4 con old_something , presione tags y elimine la twig B (también del repository remoto).

De esta manera, la única interacción con el repository del otro tipo es que creas una nueva (temporal) twig y que luego se quede con una label (no una twig no fusionada, sino una label, no hay diferencia real, pero si usas twigs no fusionadas para list de tareas pendientes, esto resuelve tu problema)

En realidad, diría que la situación con los submodules es mejor que con las twigs de A. Nunca está contaminando el historial de versiones al tener fusiones innecesarias ahora.