Realice un seguimiento de los cambios con Git utilizando files ya modificados y una copy prístina

Me dieron un proyecto con files como ese:

MyProject/ a.txt b.txt c.txt 

Inicialicé un repository de Git en el directory, pero (tontamente) no agregué todos los files al repository al inicio. En cambio, agregué files al repository justo antes de darme count de que tendría que cambiarlos.

 git add a.txt; git commit -m "Pristine A" <awesome changes to a.txt> git commit -am "Awesome Changes" 

Desafortunadamente, en mi fervor de ediciones locas me olvidé de hacer esto para algunos files. (Lea: decenas de files en muchos directorys, que serán difíciles de encontrar por ruta explícita).

 <awesome changes to b.txt> git status # Uh oh, new file b.txt 

Puedo get una instantánea del proyecto antes de mis increíbles cambios, para que Git pueda decirme qué files han cambiado desde entonces. Sin embargo, no quiero perder las decenas de confirmaciones (con descripciones) que ya agregué.

¿Cómo puedo tomar la instantánea "prístina" y hacer que Git calcule qué files han cambiado en comparación con mi directory de trabajo, sin perder mis confirmaciones existentes y sin get falsos positivos para los files que sí cambiaron pero que ya están registrados en commits?

FWIW mi "justificación" original para no agregar todo el directory al principio fue porque hay miles de files no relacionados con mi trabajo, el directory solo está disponible en SMB de alta latencia, y pensé que sabía qué files eran importantes.

Use su instantánea prístina y cree un nuevo repository git con ella (agregue todos los files y complételos).

En tu repository actual, hazlo

 git remote add pristine /path/to/pristine/repository 

después

 git remote update pristine 

Ahora puede hacer reference al maestro del repository prístino en git diff

 git diff pristine/master 

para ver una diferencia completa entre su directory de trabajo y la confirmación prístina. Si solo necesita el set de cambios, --summary debe ser la opción que está buscando. Las páginas man de git diff detallan todos los demás interruptores.

Esto debería dar como resultado un set de cambios donde los files ya agregados se mencionan de forma diferente a los files ya modificados pero no agregados.

Lo que hagas con eso después depende de ti, sin embargo, debería ser posible tomar la confirmación prístina y usar rebase, colocarla al comienzo del tree, agregar cada file, repetir cada confirmación después.