2012-09-07 8 views
271

Tengo un archivo .diff creado por un compañero de trabajo, y me gustaría aplicar los cambios enumerados en ese archivo diff a mi sucursal local del mismo repositorio exacto. No tengo acceso a la PC o la rama de ese trabajador que se utilizó para generar este archivo diff.¿Cómo se toma un archivo de git diff y se lo aplica a una sucursal local que es una copia del mismo depósito?

Obviamente, podría ir línea por línea y volver a escribir todo, pero preferiría no someter el sistema a un error humano. ¿Cuál es la forma más fácil de hacer esto?

Respuesta

406

Copia el archivo diff a la raíz de su repositorio, y luego hacer:

git apply yourcoworkers.diff 

Más información sobre el comando apply está disponible en its man page.

Por cierto: Una mejor manera de intercambiar compromete toda por el archivo es la combinación de los comandos git format-patch en el remitente y luego git am en el receptor, ya que también transfiere la información autoría y el mensaje de confirmación.

Si la aplicación de parche falla y si los commits de los que se generó el diff se encuentran actualmente en su repositorio, puede usar la opción -3 de apply que intenta fusionarse en los cambios.

También funciona con tubo de Unix de la siguiente manera:

git diff d892531 815a3b5 | git apply 
+1

Gracias por la respuesta, pero que causó un error que dice, parche falló: filename.php: 202 error: filename.php: parche no se aplica. La buena noticia es que no es el primer nombre de archivo en el archivo, por lo que al menos habría sido capaz de procesar parte del archivo. ¿Alguna idea? –

+1

También parece que tiene cambios en ese archivo que impiden que el parche funcione. Para resolver esto, podría confirmar sus cambios, crear una nueva rama, restablecerla al compromiso donde usted y su compañero de trabajo se separaron, aplicar el parche, confirmarlo y luego fusionar las dos ramas. – Philipp

+0

El archivo era demasiado diferente de lo que existía en este caso para usar el archivo diff. Seguí adelante y lo hice manualmente, pero +1 para el comando correcto, y aceptaré que esta debería haber sido la respuesta correcta. –

Cuestiones relacionadas