Оба типа git am
и git apply
могут использоваться для применения исправлений. Я не вижу разницы. Теперь я вижу разницу: git am
автоматически фиксируется, тогда как git apply
касается только файлов, но не создает фиксацию. Разве это единственная разница?
В чем разница между git am и git?
Ответ 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
будут выводить изменения, внесенные в исправление, которое вы применили, тогда вы можете исправить/добавьте новые изменения и отправьте их вместе как один новый патч.