2010-01-31 14 views
8

Si tengo un montón de cambios no confirmados en un solo archivo en mi directorio de trabajo en Git, ¿cuál es la forma más fácil de seleccionar y elegir selectivamente entre estos cambios?¿Cuál es la forma más fácil en Git de "seleccionar" cambios no confirmados en un archivo individual?

Mi forma actual es "git diff" del archivo, y luego revisar manualmente la diferencia junto con el archivo real. Si quiero restaurar bits del código anterior, puedo copiar y pegar desde el archivo diff al archivo.

Sería mucho más fácil en algunos casos si uno pudiera ver y editar los cambios en un solo archivo. Por ejemplo, ¿hay un comando Git que se podría usar para convertir el archivo de trabajo con cambios en un formato similar a la resolución de conflictos, es decir, con los símbolos "< < < <" alrededor de los cambios no confirmados? De esta forma, uno podría escoger y elegir cambios sin tener que cortar y pegar de un archivo a otro.

No estoy seguro de cómo lograr esto, ya que no se trata de una situación de tres vías (fusión). Por el contrario, se trata de una situación de dos vías, con un conjunto de cambios en un archivo (por lo que no hay conflictos). Gracias.

+0

Puede seleccionar trozos de forma selectiva con la "comprobación" "añadir", "etapa" (igual que el complemento), "reset", y "escondite". Cada uno toma una opción -p. (A partir de 1.6.6) –

+0

Gracias, William. Sí, usar -p con git-checkout resultó ser más conveniente para mí en mi situación particular que usarlo con git-add. – cjerdonek

Respuesta

11

Puede seleccionar qué trozos agregar en una confirmación por git add --patch. Esto le pedirá cada trozo en los cambios de un archivo si desea agregar ese conjunto de cambios. Si un trozo en particular es demasiado grande para ti, puedes dividirlo aún más. Existe otra opción para git-add, --interactive, que le permite trabajar con múltiples archivos.

Para obtener más información, consulte git-add man page, o this post desde una búsqueda en google.

+0

Gracias, Alok y todos. Lo probé, y definitivamente es más fácil que lo que estaba haciendo antes. Sin embargo, todavía parece menos conveniente que el proceso de resolución de conflictos. Parece que agregar de esta manera debería ser al menos tan fácil como fusionar. Todavía me pregunto si hay una manera de "engañar" a Git para que cree una situación de conflicto donde se pueden usar las líneas "<<<<" en lugar del formato diff: +/- /. – cjerdonek

+0

Estoy de acuerdo. Si hubiera una forma de utilizar cualquiera de las muchas herramientas de fusión existentes para elegir a los personajes para el escenario, sería una gran mejora con respecto a la interfaz actual de la línea de comandos, donde tienes que seguir respondiendo a los mensajes de texto. – davr

1

Además de git add --patch hay git add -i: que se podría pensar como una capa sobre git add --patch.

tutoriales sobre git add --patch y git add -i

+0

Votación a favor de los enlaces del tutorial. ¡Gracias! –

Cuestiones relacionadas