Quelle est la différence entre git am et git apply?

134

Les deux git amet git applypeuvent être utilisés pour appliquer des correctifs. Je ne vois pas la différence. Je vois une différence maintenant: git amvalide automatiquement alors git applyque touche uniquement les fichiers mais ne crée pas de validation. Est-ce la seule différence?

Christoph
la source
11
ampourrait être considéré comme une abréviation de Apply Mail...
Philip Oakley

Réponses:

144

L'entrée et la sortie sont différentes:

  • git applyprend un patch (par exemple la sortie de git diff) et l'applique au répertoire de travail (ou index, si --indexou --cachedest utilisé).
  • git amprend une boîte aux lettres de commits formatés comme des messages électroniques (par exemple la sortie de git format-patch) et les applique à la branche courante.

git amutilise git applydans les coulisses , mais fait plus de travail avant (lecture d'un Maildirou mboxet analyse des e-mails) et après (création de commits).

Georgebrock
la source
6
Remarque: git applysemble également accepter la git format-patchsortie.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
7
git applyfonctionnerait également pour la sortie de git format-patchmais les modifications ne seraient pas mises en scène et devraient être validées (créant ainsi un point de validation différent dans l'index auquel elles sont appliquées). Avec git amvous, vous transporteriez les informations de validation (avec l'auteur, etc.) dans l'index auquel elles sont appliquées. git applypuis est pour patcher votre repo (mauvais), git ampeut prendre des changements de fonctionnalités légitimes et les inclure dans votre repo (approche préférée).
Prasoon Joshi
18

git applyest pour appliquer des différences directes (par exemple à partir de git diff) alors que git amc'est pour appliquer des correctifs et des séquences de correctifs à partir d'e-mails, au format mbox ou Maildir et est "l'opposé" de git format-patch. git amessaie d'extraire les messages de validation et les détails de l'auteur des messages électroniques, c'est pourquoi il peut effectuer des validations.

CB Bailey
la source
9

Avec git amvous appliquez le correctif si vous l'utilisez, git statusvous ne verrez aucun changement local.

git applyvous permet d'effectuer les modifications dans les fichiers source comme si vous écriviez le code vous-même, par conséquent git statuset git diffaffichera les modifications apportées dans le patch que vous avez appliqué, vous pouvez ensuite corriger / ajouter d'autres modifications et les soumettre ensemble comme un nouveau patch .

0x90
la source