files - ¿Cuál es la diferencia entre ''git format-patch'' y ''git diff''?
git diff format (2)
No veo una diferencia entre la salida de ''git format-patch'' y ''git diff'', ¿hay alguna? ¿Y no podré usar ''git diff'' para producir un parche y luego aplicarlo usando git apply?
Mi problema es que tengo cambios agregados al índice, pero al parecer git format-patch solo acepta confirmaciones, así que si puedo usar el resultado de diff, entonces puedo usar este comando para producir un parche para los cambios en el índice:
git diff --cached > index.patch
De los manuales, git-format-patch prepara parches adecuados para el envío de correos electrónicos, mientras que git-diff muestra cambios.
Son dos cosas diferentes y tienen diferentes propósitos, simplemente producen un formato de parche. Pero git-format-patch
agrega datos sobre un compromiso (fecha, autor, mensaje de confirmación) y los agrupa en un formato que es adecuado para enviar como un mensaje de correo Unix (aunque estos son solo archivos, por lo que pueden enviarse a otros métodos y todavía se aplica por git-am).
Además, git-format-patch
genera un archivo de parche para cada confirmación en el rango que especifique. Estos cambios se agregarán como commits a su repositorio con git-am
.
git-diff
solo muestra la diferencia entre los dos estados que usted solicita, y se puede usar para crear un archivo de parche. Pero esto es solo un archivo de parche normal y la aplicación del parche solo cambiará el estado del directorio de trabajo.
Y sí, puedes crear un parche para tu índice de esa manera.
Un parche creado con git format-patch
también incluirá alguna metainformación sobre el commit (committer, date, commit message, ...) y contendrá la diferencia de datos binarios. Todo se formateará como un correo electrónico, de modo que se pueda enviar fácilmente. La persona que lo recibe puede luego recrear la confirmación correspondiente con git am
y todos los metadatos estarán intactos. También se puede aplicar con git apply
ya que es un superconjunto de un simple diff.
Un parche creado con git diff
será una simple diferencia con el contexto (think diff -u
). También se puede aplicar con git apply
pero los metadatos no se recrearán (ya que no están presentes).
En resumen, git format-patch
es útil para transmitir un commit, mientras que git diff
es útil para obtener un diff entre dos árboles.