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

134

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

Christoph
источник
11
amможно рассматривать как сокращение от Apply Mail...
Филип Окли

Ответы:

144

И вход, и выход отличаются:

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

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

georgebrock
источник
6
Примечание: git applyкажется, также принять git format-patchвывод.
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
7
git applyбудет работать и для вывода, git format-patchно изменения будут неустановленными, и их необходимо будет зафиксировать (таким образом, создается другая точка фиксации в индексе, к которому они применяются). С git amего помощью вы переносите информацию о фиксации (вместе с автором и т. Д.) В индекс, к которому она применяется. git applyзатем для исправления вашего репо (плохо), git amможет принимать законные изменения функций и включать его в репо (предпочтительный подход).
Прасун Джоши
18

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

CB Bailey
источник
9

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

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

0x90
источник