Estoy haciendo algo muy simple mal. Estoy tratando de preparar un archivo de revisión normal, para poder volver a aplicar algunos cambios:
$ git diff > before
$ git diff something_here > save.patch
$ git checkout .
$ patch < save.patch
$ git diff > after
$ diff before after
$
Con el something_here espacio en blanco casi funciona, pero los nombres de los archivos no son correctos. Creo que solo me falta alguna opción.
En la vida real, voy a hacer una fusión después del pago, por lo que el parche puede fallar allí, pero ya ves a lo que me refiero.
Edite
Mi culpa aquí por hacer la pregunta incorrecta. La pregunta real es, ¿quiero guardar mis cambios, hacer una fusión y luego volver a aplicar los cambios, si es posible? Lo pregunté de manera incorrecta porque estoy acostumbrado a usar parches para resolver este tipo de problemas y git diffparecía que eso era lo que quería que hiciera.
El comentario de Charles Bailey tuvo la respuesta correcta. Para mí, git-apply es lo correcto (git-stash parece más pesado de lo que necesito y el rebase y los paquetes definitivamente están más allá de mi nivel de habilidad actual). Voy a aceptar la respuesta que Charles dio (porque usted No puedo aceptar un comentario). Gracias por todas las sugerencias.
Editar, 6 años después
Como sabe cualquier persona familiarizada con el tema, sobreestimé la dificultad de git stash. Casi todos los días más o menos, usaré la siguiente secuencia:
$ git stash
$ git merge
$ git stash pop

patchlugar degit apply?git stashotras herramientas de git?git stashes la solución más fácil para lo que está tratando de hacer, pero hay muchos enfoques que funcionan.git-svn.Respuestas:
Si desea usar el parche, debe eliminar los
a/b/prefijos que usa git de forma predeterminada. Puede hacerlo con la--no-prefixopción (también puede hacerlo con la-popción de parche ):Por lo general, sin embargo, es más fácil usarlo directamente
git diffy luego usar la salida para alimentarlogit apply.La mayoría de las veces trato de evitar el uso de parches textuales. Por lo general, una o más confirmaciones temporales combinadas con rebase
git stashy paquetes son más fáciles de administrar.Para su caso de uso, creo que
stashes lo más apropiado.fuente
git diff --no-prefix master > diff.patchy luegogit checkout masterpatch -p0 < diff.patchpatch --dry-run < diff.patchantes de emitir el último comando.patchfuera de git (tal vez usando un archivo de parche generado pordiff) en un caso de uso más general.Solo use
-p1: de todos modos, deberá usar-p0el--no-prefixestuche, por lo que puede omitir--no-prefixy usar-p1:fuente
git diffgenera una línea quepatchignora.git applyEs el camino a seguir.Los git diffs tienen un segmento de ruta adicional antepuesto a las rutas de archivo. Puede quitar esta entrada en la ruta especificando -p1 con parche, así:
fuente
save.patcharchivo a cualquier lugar (incluidos los archivos binarios).git apply <file>fuente
git diff > save.patchy engit checkout .lugar de un reinicio, pero sí ...git applyo haciendo que el diff sea relevante para su estado y el puntero a la última confirmación disponible. Hacer simplementegit diffno ha hecho nada en absolutogit apply. Lo que pasagit diffes (creo) el usogit reset: las relaciones entre el repositorio, el índice y el área de trabajo son el problema.Un truco útil para evitar crear archivos de parches temporales:
fuente
git stash show -p stash@{3} | patch -p1 -d [dst-dir]