Comment appliquer un patch généré avec git format-patch?


223

J'ai 2 référentiels locaux git pointant tous les deux vers le même référentiel distant.

Dans un référentiel git, si je le fais git format-patch 1, comment puis-je appliquer ce correctif à l'autre référentiel?

Réponses:


331

Remarque: Vous pouvez d'abord prévisualiser ce que fera votre patch:

D'abord les statistiques:

git apply --stat a_file.patch

Ensuite, un essai à sec pour détecter les erreurs:

git apply --check a_file.patch

Enfin, vous pouvez utiliser git ampour appliquer votre patch en tant que commit: il vous permet de vous déconnecter d'un patch appliqué.
Cela peut être utile pour référence ultérieure.

git am --signoff < a_file.patch 

Voir un exemple dans cet article :

Dans votre journal git, vous constaterez que les messages de validation contiennent une balise «Signed-off-by». Cette balise sera lue par Github et d'autres pour fournir des informations utiles sur la façon dont la validation s'est terminée dans le code.

Exemple


9
Note à soi-même: 200e badge en or Great Answer.
VonC

4
git am < somepatch.patchrenvoie "fatal: nom ident vide (pour <>) non autorisé". Quelqu'un peut-il m'expliquer pourquoi?
gromit190

@ gromit190 qui signifie de mauvais en- Authortêtes dans le patch, et / ou vous ne l'avez pas fait git config user.{name,email}.
ulidtko

D'ACCORD; git apply --checkdit patch does not apply, et git apply -3dit repository lacks the necessary blob to fall back on 3-way merge.In git, rebaser les commits est un jeu d'enfant; mais comment les gens rebasent-ils leurs correctifs en plus du code mis à jour?
ulidtko

1
@ulidtko Peut-être avec stackoverflow.com/a/15375869/6309 ?
VonC

163
git apply name-of-file.patch

25
Cela n'a peut-être pas répondu à la question détaillée d'origine, mais cela a répondu à la question dans le titre, c'est pourquoi je suis sur cette page. Merci!
Rock Lee

12
Je comprends que c'est une vieille question et réponse ... mais j'ai pensé qu'il pourrait être utile pour certaines personnes de comprendre la différence entre git apply et git am .
mgarey

1
git apply "[... chemin complet vers le fichier ...] / nom-de-fichier.patch"
Anton Lyhin

41

Ou, si vous le faites à l'ancienne:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Juste pour que vous le sachiez: cela ne créera pas de validation, donc il perdra le message de validation et les informations sur l'auteur.
César

22

Vous devez d'abord prendre note de la différence entre git ametgit apply

Lorsque vous utilisez, git amvous souhaitez généralement appliquer de nombreux correctifs. Il faut donc utiliser:

git am *.patch

ou juste:

git am

Git trouvera automatiquement les correctifs et les appliquera dans l'ordre ;-)

UPD
Ici vous pouvez trouver comment générer de tels correctifs


1
Cette explication de la différence m'a aidé à utiliser git apply.. et en --reverse:-) 👍
Jordan Gee


14

Si vous utilisez un IDE JetBrains (comme IntelliJ IDEA, Android Studio, PyCharm), vous pouvez faire glisser le fichier de correctif et le déposer dans l'EDI, et une boîte de dialogue apparaîtra, montrant le contenu du correctif. Il ne vous reste plus qu'à cliquer sur "Appliquer le patch", et un commit sera créé.


1
Merci pour cela. C'est vraiment utile pour tout le monde. Il y a une réponse acceptée. mais cela est également utile.
Lasitha Benaragama

1
@ambarox Mais cette réponse a été rejetée une fois, je ne sais pas pourquoi
ice1000

1
peut être quelqu'un pense que la seule façon d'appliquer des correctifs est via la ligne de commande. : D je vous ai donné une upvote. cheers mate.
Lasitha Benaragama

1
@LasithaBenaragama - en quelque sorte. SO est censé non seulement aider le PO, mais aussi tous ceux qui le suivent. Cette réponse (bien qu'utile) ne fournit pas de solution générale. Cela ferait un excellent petit article de blog, mais pas une réponse "TELLEMENT bonne". Expliquerait le downvote!
OldTinfoil

-2

Vous pouvez utiliser le cmd mentionné ci-dessous

git apply fileName.patch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.