Merge commits que pertenecen a un subdirectory de una twig para dominar

Después de mirar alnetworkingedor, me sorprendió que esta pregunta ya no estuviera respondida para mi problema específico.

Tengo un repository con dos twigs, una de las cuales es la twig master , que también se publica en un repository remoto.

Mi segunda twig se llama preparation , revisé ésta en el pasado e hice algunas confirmaciones. Desafortunadamente, hice commits a un subdirectory que aún no quiero anunciar públicamente.
Hubo algunos cambios, sin embargo, que tendría sentido ser arrastrado a maestro. Esos cambios solo pertenecen a un subdirectory de la twig de preparation .

Aquí hay una image del historial de compromisos. Básicamente cometí el error de realizar cambios en un subdirectory de preparation de twigs que ahora no deseo tener en el master , ni en el repository remoto.

¿Qué puedo hacer para tener el historial de commits, pero no el commit falso?

¡Gracias!

No estoy seguro, pero tal vez solo desee eliminar una confirmación labelda como "Nueva conversación" del historial que piensa fusionar.

Si es así, puede usar el rebasamiento interactivo. Para omitir una confirmación durante la actualización interactiva, simplemente elimínela de la list de confirmación.

Supongo que cometer "Nueva conversación" es el compromiso número cinco cuando ejecuta el git log . Supongo también que su repository está limpio.

Aquí está el procedimiento.

Primero crea una nueva twig llamada new-preparation (en caso de que algo salga mal):

 git checkout -b new-preparation preparation 

Ahora ejecute el rebasamiento interactivo:

 git rebase -i HEAD~5 

Git debe comenzar vim con las últimas cinco revisiones que se muestran (la que desea deshacerse debe estar en la parte superior):

 pick SHA-1 - oldest of five commits - the one labelled "New talk" pick SHA-1 pick SHA-1 pick SHA-1 pick SHA-1 - newest of five commits 

Eliminar la primera línea El contenido del vim debe verse así:

 pick SHA-1 pick SHA-1 pick SHA-1 pick SHA-1 - newest of five commits 

Guarda el file y cierra.

Git debería reestablecer los cuatro commits restantes.

Ahora debería tener su sucursal sin el compromiso "Nueva conversación".

No creo que entiendas cómo funciona git . Y eso está horriblemente nublando lo que describes.

No puede confirmar cambios en el directory o en un subdirectory. Diga esto conmigo: los cambios se confirman en las sucursales.

El error que cometiste fue mezclar el uso de una twig para confirmaciones que no estaban relacionadas. Las twigs en git son baratas. Una práctica recomendada es crear una branch para cada function en la que trabaje.

Aparte de eso, digamos que necesitas que el trabajo anterior esté presente antes de que descubras la necesidad de hacer este cambio y lo quisieras arreglar en ambos lugares.

Eso es bastante común y ha sido respondido de muchas maneras diferentes. Necesitarás hacer un commit de rebase-onto. Eche un vistazo a la documentation de git book para rebases: http://git-scm.com/book/ch3-6.html

En resumen, desea realizar commits desde un punto hacia adelante pero omitiendo un montón de commits entre el antecesor común de su twig y el punto al que desea fusionarse.

En este caso suponiendo que es solo una confirmación, tendrás que hacer algo como esto: git rebase --onto origin/master HEAD~ preparation

Dicho esto, sugiero leer el material primero y get una comprensión de lo que está haciendo.