Was ist der Unterschied zwischen Git Am und Git Apply?

134

Beides git amund git applykann zum Anwenden von Patches verwendet werden. Ich sehe den Unterschied nicht. Ich sehe jetzt einen Unterschied: git amFestschreibt automatisch, während git applynur die Dateien berührt werden, aber kein Festschreiben erstellt wird. Ist das der einzige Unterschied?

Christoph
quelle
11
amkönnte als Abkürzung für Apply Mail...
Philip Oakley

Antworten:

144

Sowohl die Eingabe als auch die Ausgabe sind unterschiedlich:

  • git applyNimmt einen Patch (z. B. die Ausgabe von git diff) und wendet ihn auf das Arbeitsverzeichnis (oder den Index, falls --indexoder --cachedverwendet) an.
  • git amNimmt eine Mailbox mit Commits, die als E-Mail-Nachrichten formatiert sind (z. B. die Ausgabe von git format-patch), und wendet sie auf den aktuellen Zweig an.

git amwird git applyhinter den Kulissen verwendet , erledigt jedoch mehr Arbeit vor (Lesen eines Maildiroder mboxund Parsen von E-Mail-Nachrichten) und nach (Erstellen von Commits).

Georgebrock
quelle
6
Hinweis: git applyscheint auch die git format-patchAusgabe zu akzeptieren .
Ciro Santilli 法轮功 冠状 病 六四 事件 24
7
git applywürde auch für die Ausgabe von funktionieren, git format-patchaber die Änderungen wären nicht bereitgestellt und müssten festgeschrieben werden (wodurch ein anderer Festschreibungspunkt in dem Index erstellt wird, auf den sie angewendet werden). Mit git amwürden Sie die Commit-Informationen (zusammen mit dem Autor usw.) in den Index übernehmen, auf den sie angewendet werden. git applyDann dient das Patchen Ihres Repos (schlecht), git amkann legitime Funktionsänderungen vornehmen und in Ihr Repo aufnehmen (bevorzugter Ansatz).
Prasoon Joshi
18

git applydient zum Anwenden von geraden Unterschieden (z. B. von git diff), während git amdas Anwenden von Patches und Sequenzen von Patches aus E-Mails im mbox- oder Maildir-Format das "Gegenteil" von ist git format-patch. git amversucht, Festschreibungsnachrichten und Autorendetails aus E-Mail-Nachrichten zu extrahieren, weshalb Festschreibungen vorgenommen werden können.

CB Bailey
quelle
9

Mit git amder Patch anwenden also , wenn Sie verwenden git statusSie keine lokalen Änderungen sehen.

git applyErmöglicht es Ihnen, die Änderungen in den Quelldateien so vorzunehmen, als würden Sie den Code selbst schreiben, git statusund git diffgibt die Änderungen aus, die in dem von Ihnen angewendeten Patch vorgenommen wurden. Anschließend können Sie weitere Änderungen korrigieren / hinzufügen und sie zusammen als einen neuen Patch einreichen .

0x90
quelle