¿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?

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


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

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

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


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


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.


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

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.