Comment créer simplement un patch à partir de mon dernier commit git?


192

Je recherche la commande magique de créer un patch à partir du dernier commit effectué.

Mon flux de travail ressemble parfois à ceci

vi some.txt
git add some.txt
git commit -m "some change"

et maintenant je veux juste écrire

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

mais que dois-je mettre là à la place create-patch-from-last-commit-to-file?



Réponses:


305

En général,

git format-patch -n HEAD^

(consultez l'aide pour les nombreuses options), bien que ce soit vraiment pour les envoyer par courrier. Pour un seul commit juste

git show HEAD > some-patch0001.patch

vous donnera un patch utilisable.


18
soyez prudent avec "git show HEAD> some-patch0001.patch", s'il est appelé dans un terminal coloré, il duplique également les séquences d'échappement de couleur dans le fichier.
hrach

12
Vous pouvez également utiliser git diff > change.patch. Vous pouvez également inclure une plage de révisions et cela vous permet de créer des correctifs pour les modifications non validées. La grande différence, cependant, est qu'elle n'inclura pas les différences dans les fichiers binaires . Voir la réponse à Quelle est la différence entre 'git format-patch' et 'git diff'? pour plus de détails.
Rangi Keen

4
@hrach pas sous Linux, ce n'est pas le cas
Robin Green

4
Non, car ce n'est pas ce que dit la première ligne. Soit git format-patch -1ou git format-patch -n HEAD^devrait fonctionner.
Inutile le

4
Merci, je n'avais pas compris que c'était littéralement la lettre «n», je pensais que c'était un espace réservé (format-patch a à la fois les options «-n» et «- <n>»).
Étienne

61

En prenant la réponse @Useless, vous pouvez également utiliser le formulaire général sans paramètres pour le dernier commit et le mettre dans un fichier avec:

git format-patch HEAD^ --stdout > patchfile.patch

Ou, être plus propre pour les utilisateurs de Windows lorsque les tapis doivent être évités en les doublant:

git format-patch HEAD~1 --stdout > patchfile.patch

2
A travaillé pour moi - merci. Si vous utilisez Windows et Git, vous devez échapper à la carotte (je sais odieux): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley

3
Pour éviter le problème Windows d'avoir à échapper à ce signe d'insertion (ce qui le fait ressembler à une autre commande git valide), vous pouvez utiliser l'alternative de git format-patch HEAD~1. Je pense que cela finit par être moins déroutant sous Windows.
Michael Burr le

30

d'une autre manière, si vous avez l'ID de validation de ce commit particulier, vous pouvez utiliser,

git format-patch -1 {commit-id}

9

Vous avez besoin de l' -poption git log:

git log -1 -p --pretty='%b'

Utilisez celui-ci si vous ne vous souciez pas des lignes de courrier électronique de / date / objet au début du fichier.
Ryan H.

6
git format-patch -1

Fait le travail pour moi.


0

Par exemple, si vous envoyez du code dans la branche "nom_branche" sur Github. Chaque commit sur cette branche aura une URL distincte. Cliquez sur le dernier commit.

  1. Ajoutez .patch à la fin de cette URL. L'URL modifiée ressemble donc à: https://github.com/xyz/lmn-ms/tree/branch_name.patch .
  2. Ensuite, copiez et collez tout le contenu qui viendra à l'étape 1 dans un fichier local séparé et enregistrez-le avec l'extension .patch.
  3. Le patch est prêt à être utilisé.
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.