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?

claj
la source

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.

Inutile
la source
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
a1an
la source
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}
Vijay C
la source
9

Vous avez besoin de l' -poption git log:

git log -1 -p --pretty='%b'
Brandan
la source
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.

Katu
la source
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é.
abdullah imran
la source