В чем разница между '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
просто показывает разницу между двумя состояниями, которые вы запрашиваете, и может использоваться для создания файла патча. Но это обычный файл исправления, и применение патча просто изменит состояние рабочего каталога.
И да, вы можете создать патч для своего индекса таким образом.