В чем разница между 'w20> format-patch и' git diff '?

Я не вижу разницы между выходом 'git format-patch' и 'git diff', есть ли какие-либо? И не могу ли я использовать 'git diff' для создания патча, а затем применить его с помощью git apply?

Моя проблема в том, что у меня есть изменения, добавленные в индекс, но, видимо, git format-patch принимает только коммиты, поэтому, если я могу использовать вывод diff, я могу использовать эту команду для создания патча для изменений в индексе:

git diff --cached > index.patch

Ответ 1

Патч, созданный с помощью git format-patch, также будет содержать некоторую метаинформацию об фиксации (коммиттер, дата, сообщение фиксации и т.д.) и будет содержать diff двоичных данных. Все будет отформатировано как почта, так что его можно будет легко отправить. Получающий его человек может затем воссоздать соответствующую фиксацию с помощью git am, и все метаданные будут неповрежденными. Он также может быть применен с помощью git apply, поскольку он является супер-множеством простого diff.

Патч, разбитый с помощью git diff, будет простым различием с контекстом (подумайте diff -u). Он также может применяться с git apply, но метаданные не будут воссозданы (поскольку их нет).

В заключение, git format-patch полезно передать фиксацию, а git diff полезно получить разницу между двумя деревьями.

Ответ 2

Из руководств git-format-patch подготавливает исправления, подходящие для отправки по электронной почте, а git-diff показывает изменения.

Это две разные вещи и имеют разные цели, они просто выводят формат патча. Но git-format-patch добавляет данные о фиксации (дата, автор, сообщение фиксации) и связывает его в формате, который подходит для отправки в качестве почтового сообщения Unix (хотя это только файлы, поэтому их можно отправить другим методам и все еще применяется git -am).

Также git-format-patch создает файл исправления для каждой фиксации в указанном вами диапазоне. Эти изменения будут добавлены, поскольку они будут переданы вашему репозиторию с помощью git-am.

git-diff просто показывает разницу между двумя состояниями, которые вы запрашиваете, и может использоваться для создания файла патча. Но это обычный файл исправления, и применение патча просто изменит состояние рабочего каталога.

И да, вы можете создать патч для своего индекса таким образом.