Question Générer un patch git pour un commit spécifique


J'ai besoin d'écrire un script qui crée des patches pour une liste de numéros de commit SHA1.

J'ai essayé d'utiliser git format-patch <the SHA1>, mais cela a généré un patch pour chaque commit depuis que SHA1. Après quelques centaines de correctifs ont été générés, j'ai dû tuer le processus.

Existe-t-il un moyen de générer un patch uniquement pour le SHA1 spécifique?


945
2017-07-12 00:35


origine


Réponses:


Essayer:

git format-patch -1 <sha>

ou

git format-patch -1 HEAD

Appliquez le correctif avec la commande:

git am < file.patch

1539
2017-07-12 00:43



Pour générer les correctifs à partir des meilleurs commits à partir d'un hachage sha1 spécifique:

git format-patch -<n> <SHA1>

Les 10 derniers correctifs de la tête dans un seul fichier patch:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

234
2018-04-23 14:34



Supposons que vous ayez l'ID de validation 2 après la validation 1, vous pourrez exécuter:

git diff 2 1 > mypatch.diff

où 2 et 1 sont des hachages SHA.


61
2017-07-12 00:42



Cette commande (comme suggéré déjà par @Naftuli Tzvi Kay):

git format-patch -1 HEAD

Remplacer HEAD avec hash spécifique ou gamme.

générera le fichier patch pour le dernier commit formaté pour ressembler au format de boîte aux lettres UNIX.

-<n> - Préparez les correctifs des meilleurs commits.

Vous pouvez ensuite réappliquer le fichier de correctif dans un format de boîte aux lettres en:

git am -3k 001*.patch

Voir: man git-format-patch.


50
2017-07-06 13:52



git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

Solution rapide et simple.


17
2018-05-04 16:52



Pour générer un chemin à partir d'une validation spécifique (pas la dernière validation):

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

5
2018-05-24 07:26



Si vous voulez être sûr que le patch (single commit) sera appliqué en plus d'un commit spécifique, vous pouvez utiliser la nouvelle option git 2.9 (juin 2016) git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

Voir commenter bb52995, commettre 3de6651, commettre fa2ab86, commit ded2c09 (26 avril 2016) par Xiaolong Ye (``).
(Fusionné par Junio ​​C Hamano - gitster - dans commettre 72ce3ff, 23 mai 2016) 

format-patch: ajouter '--base'option pour enregistrer l'information de l'arbre de base

Les mainteneurs ou les testeurs tiers peuvent vouloir connaître l'arbre de base exact   la série de patch s'applique à. Enseigner git format-patch a '--base'option   pour enregistrer les informations de l'arbre de base et l'ajouter à la fin de la première   message (soit la lettre de motivation ou le premier patch de la série).

L'info de l'arbre de base se compose du "commit de base", qui est un   commettre qui fait partie de la partie stable de l'histoire du projet tout le monde   d'autre part, et zéro ou plusieurs «correctifs préalables», qui sont   patchs bien connus en vol qui ne font pas encore partie du "commit de base"   qui doivent être appliquées au-dessus de "base commit" dans l'ordre topologique   avant que les correctifs puissent être appliqués.

Le "commit de base" est montré comme "base-commit: "suivi du 40-hex de   le nom de l'objet commit.
  Un "patch de prérequis" est montré comme "prerequisite-patch-id: "suivi par le" patch id "40-hex, qui peut être obtenu en passant le patch à travers le" "git patch-id --stable"commande.


5
2018-06-01 06:29



Si vous voulez juste diff le fichier spécifié, vous pouvez:

git diff maître 766eceb - connexions /> 000-mysql-connector.patch


1
2018-01-17 09:40



Quel est le moyen de générer un patch uniquement pour le SHA1 spécifique?

C'est assez simple:

Option 1. git show commitID > myFile.patch

Option 2. git commitID~1..commitID > myFile.patch

Note: Remplacer commitIDavec l'ID de validation réel (code de validation SHA1).


0