J'ai besoin d'écrire un script qui crée des correctifs pour une liste de numéros de validation SHA1.
J'ai essayé d'utiliser git format-patch <the SHA1>
, mais cela a généré un patch pour chaque commit depuis ce SHA1. Après que quelques centaines de correctifs aient été générés, j'ai dû arrêter le processus.
Existe-t-il un moyen de générer un patch uniquement pour le SHA1 spécifique?
git apply --stat file.patch
# afficher les statistiques.git apply --check file.patch
# vérifier l'erreur avant de postuler.git am < file.patch
# appliquer enfin le patch.git am --keep-cr < mypatch.patch
git am -3 < file.patch
pour appliquer en utilisant une fusion à trois voies qui vous permettra de résoudre les conflits en utilisantgit mergetool
ensuite (ou en modifiant manuellement) trouvé ici .git format-patch -1 <sha> path/to/file.js
cela créera un patch contenant uniquement les différences pour le fichier.jsPour générer les correctifs à partir des validations les plus élevées à partir d'un hachage sha1 spécifique:
Les 10 derniers patchs de head dans un seul fichier de patch:
la source
git format-patch -1 HEAD
générera un patch pour le commit le plus récent-2
il génère des correctifs pour les 2 derniers commits, et une autre chose à clarifier est que la commandegot format-patch -2 HEAD
est la même que la lignegit format-patch HEAD~2
Supposons que vous ayez validé l'ID 2 après la validation 1, vous pourriez exécuter:
où 2 et 1 sont des hachages SHA.
la source
git diff hash^ hash
. le "hash ^" donne le commit précédé. (mais, bien sûr, la réponse de manojlds est meilleure)git show HEAD > mypatch.diff
pendant que vous êtes sur le commit devrait faire de même.git diff 1 2
Cette commande (comme déjà suggéré par @ Naftuli Tzvi Kay ):
Remplacez
HEAD
par un hachage ou une plage spécifique.générera le fichier de correctif pour le dernier commit formaté pour ressembler au format de boîte aux lettres UNIX.
Vous pouvez ensuite réappliquer le fichier correctif dans un format de boîte aux lettres en:
Voir:
man git-format-patch
.la source
git
patch formaté, du moins si l'utilisateur l'applique correctement.-k
flag (git am -3
) a corrigé ce formulaire moi (pas dePATCH[0/10]
messages de commit). Git version 2.20.1.windows.1Solution simple et rapide.
la source
git apply --check patch-file-name
avant d'appliquer un patch. Cela vous évitera des problèmes.Si vous voulez être sûr que le patch (commit unique) sera appliqué au dessus d'un commit spécifique, vous pouvez utiliser la nouvelle option git 2.9 (juin 2016)
git format-patch --base
Voir commit bb52995 , commit 3de6651 , commit fa2ab86 , commit ded2c09 (26 avril 2016) par Xiaolong Ye (``) .
(Fusionné par Junio C Hamano -
gitster
- en commit 72ce3ff , 23 mai 2016)Git 2.23 (Q3 2019) améliorera cela, car "
--base
" l'option de "format-patch
" a calculé lespatch-ids
correctifs prérequis pour de manière instable, qui a été mis à jour pour calculer d'une manière compatible avec "git patch-id --stable
".Voir commit a8f6855 , commit 6f93d26 (26 avril 2019) par Stephen Boyd (
akshayka
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 8202d12 , 13 juin 2019)Avant Git 2.24 (Q4 2019), "
git format-patch -o <outdir>
" faisait l'équivalent de "mkdir <outdir>
" pas "mkdir -p <outdir>
", qui est en cours de correction.Voir commit edefc31 (11 octobre 2019) par Bert Wesarg (
bertwesarg
) .(Fusionné par Junio C Hamano -
gitster
- en commit f1afbb0 , 18 oct.2019 )Avec Git 2.25 (T1 2020), "
git rebase
" ne fonctionnait pas bien lorsque laformat.useAutoBase
variable de configuration est définie, ce qui a été corrigé.Voir commit cae0bc0 , commit 945dc55 , commit 700e006 , commit a749d01 , commit 0c47e06 (04 décembre 2019) par Denton Liu (
Denton-L
) .(Fusionné par Junio C Hamano -
gitster
- en commit 71a7de7 , 16 )la source
Pour générer le chemin à partir d'une validation spécifique (pas la dernière validation):
la source
si vous voulez juste différencier le fichier spécifié, vous pouvez:
la source
Avec mes antécédents mercuriels j'allais utiliser:
Mais j'envisage d'utiliser
git format-patch -1 $ID
maintenant.la source
Comment 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
Remarque: remplacez
commitID
par l'ID de validation réel (code de validation SHA1).la source