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):
- Confíe sus cambios de trabajo.
- Haga clic derecho en el directorio raíz de la rama y haga clic en
Tortoise Git
->Create Patch Serial
- Elija el rango que tenga sentido (
Since
:FETCH_HEAD
funcionará si está bien sincronizado) - Crea el parche (s)
- Elija el rango que tenga sentido (
- Haga clic derecho en el directorio raíz de la rama y haga clic en
Tortise Git
->Show Log
- Haga clic derecho en la confirmación antes de su (s) confirmación (s) temporal (es) y haga clic en
reset "<branch>" to this...
- Seleccione la opción
Mixed
Y como aplicarlos:
- Haga clic derecho en el directorio raíz de la rama y haga clic en
Tortoise Git
->Apply Patch Serial
- Seleccione los parches correctos y aplíquelos.
- Haga clic derecho en el directorio raíz de la rama y haga clic en
Tortise Git
->Show Log
- 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...
- Seleccione la opción
Mixed