tag remove practices crear commands best git

remove - ¿Puedo elegir de forma interactiva trozos de otro git commit?



git tag commands (3)

El uso de cherry-pick -n no es realmente satisfactorio, ya que me deja con el trabajo sucio de eliminar todo el código no requerido. Realmente me gustaría elegir los cambios seleccionados que quiero probar.

El trabajo puede haber estado sucio antes, pero con el advenimiento de git checkout --patch , ahora puedes descartar cambios de forma selectiva, similar a git add -p para agregar.

Estoy buscando exactamente el mismo comportamiento que

git add -i -p

Pero en lugar de componer una confirmación de mi directorio de trabajo, me gustaría componer mi directorio de trabajo desde (partes de) una confirmación. Cómo puedo hacer eso ?

Mi caso de uso es que tengo varias características distintas que se agrupan en un solo compromiso y me gustaría probarlas una por una

El uso de cherry-pick -n no es realmente satisfactorio, ya que me deja con el trabajo sucio de eliminar todo el código no requerido. Realmente me gustaría elegir los cambios seleccionados que quiero probar.


Puede usar git reset --mixed HEAD^1 para revertir el índice, luego seleccione los trozos que desee con git add -i .

El reset hará retroceder el índice a la confirmación anterior (esencialmente, no se confirmará la confirmación de lo que era la CABEZA), pero no tocará el árbol de trabajo. Ahora puede organizar los tacos que desee, cometerlos y desechar el resto con un git reset --hard HEAD .


Sobre la base de la gran respuesta de Cameron Skinner, ampliaré esto un poco para incluir el caso cuando tenga una sucursal con múltiples confirmaciones , tal vez fusionar confirmaciones, tal vez una gran cantidad de "ruido" y desee seleccionar solo tipos muy específicas de eso. (que fue exactamente lo que me pasó hoy)

Sigue estos pasos:

git checkout source-branch git checkout -b cherry-pick-branch # Gives you a new branch based on source-branch git reset --mixed master

Esto te dejará con una rama donde todos los cambios están en el sistema de archivos, pero nada se ha comprometido / organizado. Luego use git add -p para agregar selectivamente las partes que desea poner en escena, y luego presione y presione como siempre.