unstaged not from does create git git-patch

not - Cree un parche git a partir de los cambios en el directorio de trabajo actual



git save patch file (6)

Digamos que tengo cambios no confirmados en mi directorio de trabajo. ¿Cómo puedo hacer un parche de aquellos sin tener que crear un commit?


Me gusta:

git format-patch HEAD~<N>

donde <N> es el número de las últimas confirmaciones para guardar como parches.

Los detalles de cómo usar el comando están en el DOC


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

git diff HEAD > file_name.patch


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

git diff > mypatch.patch

Pero a veces sucede que parte de lo que estás haciendo son archivos nuevos que no están rastreados y no estarán en tu salida de git diff . Entonces, una manera de hacer un parche es organizar todo para un nuevo compromiso (pero no hacer el compromiso), 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

Más tarde puede aplicar el parche:

git apply mypatch.patch


Si quieres hacer binario, da una opción --binary cuando --binary git diff .


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


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

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

git format-patch <options...>

Después de haber hecho el parche, ejecute este comando:

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

Esto hará retroceder sus compromisos temporales. El resultado final deja su copia de trabajo (intencionalmente) sucia con los mismos cambios que tuvo originalmente.

En el lado de recepción, puede utilizar el mismo truco para aplicar los cambios a la copia de trabajo, sin tener el historial de confirmación. 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 toda esta opción. He visto algunos errores al aplicar los parches cuando la persona que los hizo no había realizado tantos cambios como yo. Probablemente hay maneras de hacerlo funcionar, pero no lo he investigado mucho.

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

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

Y como aplicarlos:

  1. Haga clic derecho en el directorio raíz de la rama y haga clic en Tortoise Git -> Apply Patch Serial
  2. Seleccione los parches correctos y aplíquelos.
  3. Haga clic derecho en el directorio raíz de la rama y haga clic en Tortise Git -> Show Log
  4. Haga clic con el botón derecho en la confirmación antes de las confirmaciones del parche, y haga clic en reset "<branch>" to this...
  5. Seleccione la opción Mixed