Nuestro grupo redactor ha pasado mucho tiempo investigando la solución a tus preguntas, te compartimos la respuesta de modo que esperamos serte de gran apoyo.
Solución:
Si aún no ha confirmado los cambios, entonces:
git diff > mypatch.patch
Pero a veces sucede que parte de lo que está haciendo son archivos nuevos que no están rastreados y no estarán en su git diff
producción. Entonces, una forma de hacer un parche es organizar todo para una nueva confirmación (git add
cada archivo, o simplemente git add .
) pero no hagas 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
Posteriormente puede aplicar el parche:
git apply mypatch.patch
git diff
para cambios sin etapas.
git diff --cached
para cambios escalonados.
git diff HEAD
para cambios por etapas y sin etapas.
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 tendrá que crear una confirmación temporal. Una vez que haya realizado sus compromisos temporales, puede crear el parche con:
git format-patch
Después de que haya hecho el parche, ejecute este comando:
git reset --mixed
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 receptor, puede usar el mismo truco para aplicar los cambios a la copia de trabajo, sin tener el historial de confirmaciones. Simplemente aplique el(los) parche(s), y git reset --mixed
.
Tenga en cuenta que es posible que deba estar bien sincronizado para que funcione toda esta opción. He visto algunos errores al aplicar parches cuando la persona que los creaba no había realizado tantos cambios como yo. Probablemente hay formas de hacer que funcione, pero no he investigado mucho.
Aquí se explica cómo crear los mismos parches en Tortoise Git (no es que recomiende usar esa herramienta):
- Confirme 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 los parches
- 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
- Haz clic derecho en la confirmación antes de sus confirmaciones temporales y haga clic en
reset "
" to this... - Selecciona el
Mixed
opción
Y cómo 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
- Haz clic derecho en la confirmación antes de las confirmaciones del parche y haga clic en
reset "
" to this... - Selecciona el
Mixed
opción