¿Cómo se toma un archivo git diff y se aplica a una rama local que es una copia del mismo repositorio?


492

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 rama local del mismo repositorio. No tengo acceso a la PC o rama de ese trabajador que se utilizó para generar este archivo de diferencias.

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

Respuestas:


747

Copie el archivo diff en la raíz de su repositorio y luego haga:

git apply yourcoworkers.diff

Más información sobre el applycomando está disponible en su página de manual .

Por cierto: una mejor manera de intercambiar confirmaciones completas por archivo es la combinación de los comandos git format-patchen el remitente y luego git amen el receptor, porque también transfiere la información de autoría y el mensaje de confirmación.

Si la aplicación del parche falla y si los commits a partir de los cuales se generó el diff están realmente en su repositorio, puede usar la -3opción de applyque intenta fusionarse en los cambios.

También funciona con la tubería Unix de la siguiente manera:

git diff d892531 815a3b5 | git apply

3
Gracias por la respuesta, pero eso causó un error que decía: el parche falló: filename.php: 202 error: filename.php: el 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 podido procesar parte del archivo. ¿Alguna idea?
Mike_K

44
También parece tener cambios en ese archivo que impiden que el parche funcione. Para resolver esto, puede confirmar sus cambios, crear una nueva rama, restablecerla en la confirmación donde usted y su compañero de trabajo divergieron, aplicar el parche, confirmarlo y luego fusionar las dos ramas.
Philipp

3
@orlybg Cuando aún no lo haya confirmado, haga lo siguiente git reset --hardpara devolver su árbol de trabajo a la última confirmación. Cuando ya lo haya confirmado, agregue la revisión a la que desea volver.
Philipp

55
@orlybg Lo siento, pero estás jodido. Git solo crea un punto de control al que puede regresar cuando realiza una confirmación. Es por eso que muchas guías de git recomiendan comprometerse temprano y con frecuencia .
Philipp

44
@orlybg como mínimo, ejecute git stashantes de realizar alguna acción que quizás desee revertir después. Luego, de cualquier manera, puede recuperar su alijo y comprometerse en algún momento posterior.
maurice
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.