¿Cómo se toma un archivo git diff y se aplica a una sucursal local que es una copia del mismo repositorio?
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. 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 sencilla de hacer esto?
Copie el archivo diff a la raíz de su repositorio y luego haga:
git apply yourcoworkers.diff
Más información sobre el apply
comando 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-patch
en el remitente y luego git am
en 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 las confirmaciones desde las que se generó la diferencia están realmente en su repositorio, puede usar la -3
opción que apply
intenta fusionar los cambios.
También funciona con tuberías Unix de la siguiente manera:
git diff d892531 815a3b5 | git apply
Parece que también puedes usar el comando parche. Coloque la diferencia en la raíz del repositorio y ejecútela patch
desde la línea de comando.
patch -i yourcoworkers.diff
o
patch -p0 -i yourcoworkers.diff
Es posible que deba eliminar la estructura de carpetas principal si crearon la diferencia sin usar --no-prefix
.
Si es así, puede eliminar las partes de la carpeta que no se aplican usando:
patch -p1 -i yourcoworkers.diff
-p(n) significa cuántas partes de la estructura de carpetas se eliminarán.
Más información sobre la creación y aplicación de parches aquí .
También puedes usar
git apply yourcoworkers.diff --stat
para ver si la diferencia por defecto aplicará algún cambio. Puede decir 0 archivos afectados si el parche no se aplica correctamente (estructura de carpetas diferente).