¿Cómo puedo eliminar las confirmaciones de git sin reiniciar el directory?

Antes que nada: sí, busqué este tema aquí y encontré muchas respuestas .

Sin embargo, ninguno de ellos era lo que necesitaba para mi caso de uso especial. Antes de marcar esto como un duplicado, lea mi información de antecedentes por favor.


Antecedentes: actualmente estoy trabajando como desarrollador de aplicaciones independientes y profesional independiente. Desarrollé un marco que estoy vendiendo a diferentes clientes. Al desarrollar este marco, estaba usando el código fuente sin procesar y se lo asigné a uno de mis clientes, Git Repos. Nunca pensé en venderlo en ese momento . Creció en complejidad y function y ahora tengo una versión comstackda de esto.

Ahora me gustaría poder eliminar algunas confirmaciones sin volver a basar el proyecto para eliminar el código fuente porque muchas personas tendrían acceso a él.

Busqué por bastante time y no pude encontrar una solución funcional.

Tengo una teoría que puede funcionar en tu caso.

Estado actual:

master: A ---- B ---- C ---- D ---- E ---- F ^ HEAD 

Digamos que quieres eliminar commits B y E pero mantener C , D y F

Do git reset HEAD~1
git stash
Repita los pasos anteriores hasta que HEAD llegue a A

Ahora el master ve así:

 master: A Stash stack looks like: ^ B HEAD C D E F 

Pagar una nueva temp twig:

 master: A Stash stack looks like | B | C temp: AD ^ E HEAD F 

Ahora, puede abrir selectivamente cada escondite en la temp (resolviendo conflictos si es necesario). Tenga en count que cuando se producen conflictos, el alijo no se elimina de la list. Tienes que llamar explícitamente a git stash drop

git stash pop stash{revision number}
git stash drop stash{revision number} si hubo un conflicto.
git stash drop stash {unwanted revision}

temp debería verse así:

 master: A \ temp: ---- C ---- D ---- F ^ HEAD 

Combina o rebase la temp con el master . El master debería verse así después de la rebase y fusión rápida:

 master: A ---- C ---- D ---- F ^ HEAD 

NOTA: En el paso uno, otra forma (más rápida?) De hacerlo es: git reset <SHA of A> . Luego puede hacer git stash --patch interactivos usando git stash --patch y selectivamente ocultar fragments de sus cambios.

Creo que esto funcionará

 git reset HEAD^ 

usa HEAD sin –hard o –soft flag