Git deshace los cambios en los files que coinciden con la expresión regular en un set de cambios particular

Supongamos que tengo un grupo de files que fueron modificados por el set de cambios X. Este set de cambios actualmente es HEAD. Quiero separar todos los cambios en los files que coincidan con regex '* Test.java' en otro set de cambios. Si lo hago:

git diffstat HEAD^ HEAD 

Actualmente obtendría algo como:

 M a/b/c/ThisIsSomeClass.java M a/b/c/d/ThisIsSomeTest.java M a/JustAnotherClass.java M a/b/c/AnotherTest.java 

¿Qué secuencia de commands git puedo hacer para separar los files * Test.java en otro set de cambios?

Algo como esto debería funcionar. Asegúrese de ejecutarlo en una copy de su repository de Git al principio para asegurarse de que funciona correctamente; si no tiene cuidado con ejecutar el reset , es posible que pierda el trabajo. En general, cuando se hace una manipulación como esta, debe asegurarse de que su directory esté limpio; todo debe ser cometido, escondido o ignorado, por lo que no hay cambios importantes o files no comprometidos por ahí.

 git reset --soft HEAD^ git reset $(git diff --cached --name-only -- '*Test.java') git commit -m "This is the first commit, that does not contain the *Test.java" git add -u . git commit -m "This is the second commit, of just the *Test.java files" 

El reset --soft lo reseteará para confirmar HEAD^ , pero con todos los cambios del último compromiso todavía en etapas, listo para comprometerse. El próximo git reset desestabilizará todos los files modificados llamados *Test.java , dejando los otros aún en escena. La confirmación comprometerá los cambios que todavía están en etapas. Ahora coloca todos los otros files de nuevo, con git add -u . (Esto solo representará los files que se cambian, no agregará nuevos files, por lo que es seguro ejecutarlo incluso si tiene otros files que no desea agregar a su confirmación; si tiene nuevos files que sin grabar en el process de hacer esto, suelte el -u o agréguelos individualmente). Y luego comprometes ese segundo set de files.