В чем разница между git am и git?

Оба типа git am и git apply могут использоваться для применения исправлений. Я не вижу разницы. Теперь я вижу разницу: git am автоматически фиксируется, тогда как git apply касается только файлов, но не создает фиксацию. Разве это единственная разница?

Ответ 1

Оба входа и выхода различны:

  • git apply принимает патч (например, вывод git diff) и применяет его к рабочий каталог (или индекс, если используется --index или --cached).
  • git am берет почтовый ящик коммиттов, отформатированных как сообщения электронной почты (например, вывод git format-patch) и применяет их к текущей ветке.

git am использует git apply за кулисами, но делает больше работы до (чтение a Maildir или mbox и разбор сообщений электронной почты) и после (создание коммитов).

Ответ 2

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

Ответ 3

С git am вы применяете патч, поэтому, если вы используете git status, вы не увидите локальных изменений.

git apply позволяет вам вносить изменения в исходные файлы, как если бы вы сами писали код, поэтому git status и git diff будут выводить изменения, внесенные в исправление, которое вы применили, тогда вы можете исправить/добавьте новые изменения и отправьте их вместе как один новый патч.