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


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

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

git diff --cached > index.patch
2 81

2 ответа:

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

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

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

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

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

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

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

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