Pregunta Crea un parche git a partir de los cambios en el directorio de trabajo actual


Digamos que tengo cambios no confirmados en mi directorio de trabajo. ¿Cómo puedo crear un parche sin tener que crear una confirmación?


561
2018-03-01 19:14


origen


Respuestas:


git diff para cambios sin escenario. git diff --cached para cambios por etapas


262
2018-03-01 19:16



Si aún no ha realizado los cambios, entonces:

git diff > mypatch.patch

Pero a veces sucede que parte de las cosas que estás haciendo son nuevos archivos que no se han rastreado y no estarán en tu git diff salida. Entonces, una forma de hacer un parche es organizar todo para una nueva confirmación (pero no hacer la confirmación), y luego:

git diff --cached > mypatch.patch

Agregue la opción 'binario' si desea agregar archivos binarios al parche (por ejemplo, archivos mp3):

git diff --cached --binary > mypatch.patch

Luego puede aplicar el parche:

git apply mypatch.patch

1151
2018-03-15 17:43



git diff y git apply funcionará para archivos de texto, pero no funcionará para archivos binarios.

Puede crear fácilmente un parche binario completo, pero deberá crear una confirmación temporal. Una vez que haya realizado su (s) compromiso (s) temporal (es), puede crear el parche con:

git format-patch <options...>

Después de que haya creado el parche, ejecute este comando:

git reset --mixed <SHA of commit *before* your working-changes commit(s)>

Esto revertirá su (s) compromiso (s) temporal (es). El resultado final deja su copia de trabajo (intencionalmente) sucia con los mismos cambios que tenía originalmente.

En el lado de recepción, puede usar el mismo truco para aplicar los cambios a la copia de trabajo, sin tener el historial de compromisos. Simplemente aplique los parches, y git reset --mixed <SHA of commit *before* the patches>.

Tenga en cuenta que es posible que tenga que estar bien sincronizado para que funcione esta opción completa. He visto algunos errores cuando aplicaba parches cuando la persona que los realizaba no había realizado tantos cambios como yo. Probablemente haya formas de hacer que funcione, pero no he profundizado en ello.


Aquí se explica cómo crear los mismos parches en Tortoise Git (no es que yo recomiende usar esa herramienta):

  1. Confirma tus cambios de trabajo
  2. Haga clic derecho en el directorio raíz de la sucursal y haga clic Tortoise Git -> Create Patch Serial
    1. Elija el rango que tenga sentido (Since: FETCH_HEAD funcionará si estás bien sincronizado)
    2. Crea los parches
  3. Haga clic derecho en el directorio raíz de la sucursal y haga clic Tortise Git -> Show Log
  4. Haga clic derecho en el compromiso antes de su (s) compromiso (s) temporal (es), y haga clic reset "<branch>" to this...
  5. Selecciona el Mixed opción

Y cómo aplicarlos:

  1. Haga clic derecho en el directorio raíz de la sucursal y haga clic Tortoise Git -> Apply Patch Serial
  2. Seleccione los parches correctos y aplíquelos
  3. Haga clic derecho en el directorio raíz de la sucursal y haga clic Tortise Git -> Show Log
  4. Haga clic derecho en el compromiso antes de la (s) confirmación (es) del parche y el clic reset "<branch>" to this...
  5. Selecciona el Mixed opción

63
2018-03-25 22:18



Para crear un parche con ambos archivos modificados y nuevos (en etapas) puede ejecutar:

git diff HEAD > file_name.patch

20
2017-10-13 09:17



Si quieres hacer binario, dale un --binary opción cuando se ejecuta git diff.


8
2017-10-08 05:19