2012-04-19 8 views
5

He escrito una confirmación para un archivo desde gitk haciendo clic derecho en la confirmación y seleccionando "Escribir confirmación en el archivo".¿Cómo hago el reverso de "Write commit to file" de gitk?

¿Cómo aplico la confirmación de este archivo? Puedo hacer git apply, git add y git commit combo, pero ¿no hay un comando de un solo paso para simplemente tomar el resultado (con el mensaje de compromiso y los metadatos) y confirmarlo tal como está?

+1

Esto está muy mal planteado: use la misma terminología que git. No entiendo lo que quiere decir con "escrito un compromiso con un archivo" y mantengo git-gui. ¿Comprometió cambios en un archivo y luego generó un parche de alguna manera? Los detalles importan si espera recibir asistencia útil. Cómo se generó el parche - * exactamente *. Como habrás notado, git apply y git am aceptan diferentes archivos de formato; uno espera parches, los otros correos electrónicos con parches en línea e información de compromiso. Sospecho que la respuesta a continuación es en realidad correcta. – patthoyts

+2

@patthoyts ¿De qué otra manera puedo describir haciendo clic en el botón "Escribir compromiso para archivar"? –

+0

Parece que hay una opción "write commit to file" en 'gitk', que abre un cuadro de diálogo que ejecuta el comando' git diff-tree --stdin -p --pretty'. 'git am' aparentemente no entiende este formato. 'git apply' es solo para aplicar diffs, es decir, no creará el objeto de confirmación. –

Respuesta

2

Estoy usando Linux, pero creo que veo de lo que estás hablando. En gitk hay una opción "Escribir compromiso para archivar" al hacer clic derecho en una confirmación, que abre un cuadro de diálogo que realiza el comando git diff-tree --stdin -p --pretty de forma predeterminada.

git apply es solo para aplicar diffs, es decir, no creará el objeto de confirmación, por lo que no debería utilizarse. git am debe ser la herramienta correcta para realizar esta operación, ya que crea objetos de confirmación. Sin embargo, no comprende el formato de salida del comando anterior y crea el error que está viendo.

La opción más fácil es, probablemente, crear el parche utilizando un formato git am que comprende el uso de git format-patch en lugar de git diff-tree. Puede haber una forma de obligar al git am a comprender el formato git diff-tree, pero no hago parches demasiado, por lo que no estoy al tanto de ello.

0

git am podría hacer lo que estás buscando. Toma los parches generados por git format-patch como entrada. No sé lo que git-gui está escupiendo.

+0

"Falló la detección de formato de parche". Es un poco raro ya que acabo de generar el archivo con el mismo git en la misma máquina en el mismo repositorio. –

+0

¿Cómo se supone que funciona? La página del manual habla de un buzón como parámetro, lo que parece indicar que este no es el comando correcto. –

+1

Después de hacer algunas excavaciones, el comando realmente espera un formato de buzón, no un parche. –

2

Nadie parece haber proporcionado una respuesta real a la pregunta, así que esto es lo que encontré de https://github.com/sinsunsan/archiref_wiki/wiki/Git-howto

patch -p1 < patch-file 

Esto toma el archivo de revisión producido por 'escribir comprometerse a presentar', dice que ignorar el primer nivel de la ruta (-p1), es decir, a /, b/en el archivo, y se aplica a los archivos actuales en el disco. El resultado está entonces en su árbol de trabajo, y puede comprometerse como una nueva confirmación:

git commit -am'Commit message here please.'