En una gran rama de refactorización, me vi obligado a realizar confirmaciones debido a algún defecto de git (git pierde la pista / historial de los archivos movidos si cambia demasiado el contenido antes de la confirmación), lo que dejó el repositorio con confirmaciones que no son "compilables". Para estar seguro, también presioné estas confirmaciones (hoy en día, por si acaso me enferma). Sería genial, si pudiera aplastar todo eso en una confirmación, ya sea antes o después de fusionar main en mi rama (y luego volver a main). Esto es lo que parece:

main:    x --- x --- x --- x --- x
          \                     /
branch:    x' --- a --- b --- c

Cómo debería verse al final:

main:    x --- x --- x --- x --- x --- x
          \                       \   /
branch:    x'--- (manySquashed) --- m

Además, debido a que los pasos intermedios de la refactorización no son de interés (todo el antes / después es todo lo que me interesa), no necesito muchas de las confirmaciones empujadas como simples.

En muchas publicaciones no pude encontrar la solución a esta solicitud específica (o simplemente no entiendo git lo suficiente, soy un novato con git).

EDITAR: explicación de la pérdida de historial de git: Lo que básicamente tengo que hacer es extraer la funcionalidad principal de un componente en una biblioteca base para su reutilización por componentes similares. Para no perder el historial de muchos archivos (muchas ediciones en los últimos 8 años) que ahora van a la biblioteca base, moví muchos archivos a la nueva carpeta. Hay una convención de nomenclatura aplicada a los archivos / clases que marcan el lugar al que pertenecen. A medida que muevo la funcionalidad principal de, digamos, SpecialComponent1 a BaseComponentLib, los archivos / clases necesitan un ajuste en sus nombres. Descubrí que después de mover los archivos (aún no confirmados), cuando los edito (por ejemplo, aplico el nuevo nombre en las clases), git (usando SmartGit) cambia la "Modificación" de "Renombrado" a "Sin seguimiento" cuando el porcentaje de cambios dentro del archivo cruza una cierta cantidad. Si bien veo todo el historial del archivo con "Modificación" "Renombrado", con "Sin seguimiento" ya no hay ninguno. Descubrí que solo puedo solucionar este problema cuando confirmo los archivos movidos antes de realizar cualquier edición (por lo tanto, tengo las confirmaciones desordenadas / muchas).

1
Robin Holenweger 29 oct. 2020 a las 11:44

1 respuesta

La mejor respuesta

Para aplastar todas las confirmaciones a--b--c en una única confirmación, ejecute:

git reset --soft x'
git commit
2
LeGEC 29 oct. 2020 a las 09:30