Agregue cambios a commits en el medio en Git

Cómo agregar los nuevos cambios a las confirmaciones que están en el medio, es decir, no agregar a la confirmación superior.

git log commit1 <--- HEAD commit2 commit3 

Cómo agregar los cambios directamente a commit3, sin eliminar commit1 y commit2 y luego agregar cambios al commit3.

¿Debo usar escondite?

Si es posible, proporcione el enlace.

Tienes que hacer una rebase interactiva. Lea la página de ayuda de git rebase para más detalles. La respuesta corta es que continuarás y comprometerás tus cambios "intermedios" como de costumbre, y luego ejecutarás git rebase -i HEAD~4 . Aparecerá una list de los últimos 3 commit en un editor de text. Simplemente reorderar las confirmaciones donde la confirmación más nueva se coloca en el medio, y luego save y salir del editor. Git intentará rebuild el historial en el nuevo order. Puede terminar con conflictos. Si es así, corrígelos como lo harías para un conflicto de combinación y luego ejecuta git rebase --continue después de que todos hayan sido arreglados y agregados. Te dice todo esto cuando tienes un conflicto, así que solo lee los posts de error y estarás bien.

EDITAR: en realidad, parece que quieres editar una confirmación existente. En ese caso, cuando aparezca el editor, mueva su nueva confirmación temporal para que esté al lado de commit3 y luego cambie el command para "squash" de "pick":

 pick 123456 commit3 squash 541343 tmpcommit pick 654321 commit2 pick 431523 commit1 

EDIT2: si la bifurcación y commit1, commit2 y commit3 ya son públicos, entonces no deberías volver a establecer la base. Por otra parte, no deberías modificar los commits de todos modos, por lo que toda la pregunta sería discutible. Estoy asumiendo que esta es una twig privada o una que otros esperan que se vuelva a configurar y se rebobine.

Puedes hacer esto con git-rebase :

 git rebase -i commit3^ 

En el file que aparece, cambie pick commit3 para edit commit3 . Guarde y salga, luego realice los cambios. Compromételos como lo harías normalmente, luego usa git rebase --continue . Cuando hayas terminado, verás tus nuevos cambios entre commit3 y commit2.

(Esto funcionará igual que la respuesta de Sjoerd, es solo una forma diferente de pensar al respecto. Si tus cambios entran en conflicto con commit2, tendrás que manejarlo de cualquier manera).

Crea una nueva twig, que es una copy de commit3. Agrega tus cambios y confirma. Luego, combine commit2 y commit1 en esa twig.