В чем разница между «git format-patch» и «git diff»? - PullRequest
85 голосов
/ 07 января 2011

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

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

git diff --cached > index.patch

Ответы [ 2 ]

121 голосов
/ 07 января 2011

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

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

Таким образом, git format-patch полезен для передачи коммита, а git diff полезен для получения различий между двумя деревьями.

9 голосов
/ 07 января 2011

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

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

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

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

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

...