¿Cómo aplicar un parche generado con git format-patch?

221

Tengo 2 repositorios locales de git que apuntan al mismo repositorio remoto.

En un repositorio de git, si lo hago git format-patch 1, ¿cómo puedo aplicar ese parche al otro repositorio?

Silverburgh
fuente

Respuestas:

330

Nota: Primero puede obtener una vista previa de lo que hará su parche:

Primero las estadísticas:

git apply --stat a_file.patch

Luego, una ejecución en seco para detectar errores:

git apply --check a_file.patch

Finalmente, puede usar git ampara aplicar su parche como confirmación: le permite cerrar la sesión de un parche aplicado.
Esto puede ser útil para referencia posterior.

git am --signoff < a_file.patch 

Vea un ejemplo en este artículo :

En su registro de git, encontrará que los mensajes de confirmación contienen una etiqueta "Firmado por". Esta etiqueta será leída por Github y otros para proporcionar información útil sobre cómo terminó la confirmación en el código.

Ejemplo

VonC
fuente
99
Nota personal: insignia de oro 200a Gran Respuesta.
VonC
44
git am < somepatch.patchproduce "fatal: nombre de identificación vacío (para <>) no permitido". ¿Alguien puede explicarme por qué?
gromit190
@ gromit190 que significa mal Authorencabezados en el parche, y / o no lo hiciste git config user.{name,email}.
ulidtko
OKAY; git apply --checkdice patch does not apply, y git apply -3dice repository lacks the necessary blob to fall back on 3-way merge.En git, rebasar los compromisos es una brisa; pero ¿cómo las personas vuelven a crear sus parches sobre el código actualizado?
ulidtko
1
@ulidtko ¿Quizás con stackoverflow.com/a/15375869/6309 ?
VonC
162
git apply name-of-file.patch
Jeff Dallien
fuente
25
Es posible que esto no haya respondido a la pregunta detallada original, pero respondió la pregunta en el título, por eso estoy en esta página. ¡gracias!
Rock Lee
12
Entiendo que esta es una vieja pregunta y respuesta ... pero pensé que podría ser útil para algunas personas entender la diferencia entre git apply y git am .
mgarey
1
git apply "[... ruta completa al archivo ...] / name-of-file.patch"
Anton Lyhin
41

O, si lo estás pateando de la vieja escuela:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
Dominic Cooney
fuente
3
Para que lo sepas: eso no creará una confirmación, por lo que perderá el mensaje de confirmación y la información del autor.
César
22

Primero debes tomar nota de la diferencia entre git amygit apply

Cuando lo usa git am, generalmente desea aplicar muchos parches. Por lo tanto, debe usar:

git am *.patch

o solo:

git am

Git encontrará parches automáticamente y los aplicará en orden ;-)

UPD
Aquí puede encontrar cómo generar tales parches

Eugen Konkov
fuente
1
Esta explicación de la diferencia me ayudó a usar git apply... y en --reverse:-) 👍
Jordan Gee
22

Si quieres aplicarlo como commit , usa git am .

Jakub Narębski
fuente
1
¿Cómo sueles obtener los archivos mbox en primer lugar?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
14

Si está utilizando un IDE de JetBrains (como IntelliJ IDEA, Android Studio, PyCharm), puede arrastrar el archivo del parche y soltarlo dentro del IDE, y aparecerá un cuadro de diálogo que mostrará el contenido del parche. Todo lo que tiene que hacer ahora es hacer clic en "Aplicar parche", y se creará una confirmación.

ice1000
fuente
1
Gracias por esto. Esto es realmente útil para todos. Hay una respuesta aceptada. Pero esto también es útil.
Lasitha Benaragama
1
@ambarox Pero esta respuesta fue rechazada una vez, no sé por qué
ice1000
1
Puede que alguien piense que la única forma de aplicar parches es a través de la línea de comandos. : D te di un voto a favor. Salud.
Lasitha Benaragama
1
@LasithaBenaragama - más o menos. SO está destinado no solo a ayudar al OP, sino también a todos los que lo siguen. Esta respuesta (aunque útil) no proporciona una solución general. Esto sería una excelente publicación de blog, pero no una respuesta "TAN buena". ¡Explicaría el voto negativo!
OldTinfoil
-2

Puede usar cmd mencionado a continuación

git apply fileName.patch
Amit Sharma
fuente