Comment sélectionner uniquement les modifications pour un seul fichier, pas la totalité du commit

Je dois appliquer les modifications apscopes dans une twig à une autre twig. Je peux utiliser le choix des cerises pour le faire. Cependant, dans mon cas, je veux appliquer des modifications qui ne sont pertinentes que pour un seul fichier, je n’ai pas besoin de sélectionner des modifications entières. Comment faire ça?

Vous avez différentes options en fonction de ce que vous souhaitez atteindre:

Si vous souhaitez que le contenu du fichier soit identique à celui de la twig cible, vous pouvez utiliser git checkout -- . Cela ne va cependant pas “choisir” les changements qui se sont produits dans un seul commit, mais juste prendre l’état résultant de ce fichier. Donc, si vous avez ajouté une ligne dans une validation, mais que les validations précédentes ont changé davantage, et que vous souhaitez uniquement append cette ligne sans ces autres modifications, une extraction n’est pas ce que vous voulez.

Sinon, si vous souhaitez appliquer le correctif introduit lors d’une validation à un seul fichier, vous disposez de plusieurs options. Vous pouvez lancer git cherry-pick -n , c’est-à-dire sans le valider, éditez le commit (par exemple, réinitialisez tous les fichiers en utilisant git reset -- . Et ajoutez uniquement le fichier que vous voulez modifier en utilisant git add ). Ou vous pouvez créer le diff pour le fichier et appliquer le diff alors:

 git diff ^.. --  | git apply 

Créez un patch file et appliquez-le.

 git diff branchname -- filename > patchfile git apply patchfile 

MODIFIER:

Comme vous devez prendre les modifications à partir d’une validation, créez le correctif comme ceci:

 git show sha1 -- filename > patchfile 

Une autre chose utile à faire est d’obtenir le correctif localement, puis d’utiliser:

 git checkout {, commit's SHA}  

Ce n’est pas un choix à la cerise si.

Git a tout prêt 🙂

Il suffit d’utiliser git checkout

La réponse la mieux classée indique que git checkout -- . Cependant, cette approche ne fonctionnera que si le fichier existe dans la twig en cours.

C’est ce que vous recherchez:

 git checkout target-branch sha1 path/to/file 

sha1 est facultatif

Ce que j’ai tendance à faire est d’utiliser git ls-tree

il suffit de faire:

 git ls-tree -r  |grep 'your filename' # there will be output that shows a SHA1 of your file git show ${SHA1 of your file} > 'your filename' 

Cela va imprimer tous les noms de fichiers correspondant à votre grep et donner les clés SHA1 des fichiers dans la validation.

Git Show peut également être utilisé sur des fichiers en dehors de votre succursale. utiliser > depuis votre shell pour diriger la sortie dans un fichier vous donne le résultat que vous recherchez.

 git checkout the_branch_with_the_change the/path/to/the/file/you/want.extension 

Cela fonctionne si vous souhaitez qu’un seul fichier d’une autre twig soit copié dans la twig de travail en cours

 git reset HEAD~1 

déplace les fichiers dans la phase de pré-validation

 git stash 

supprime de la mémoire

Maintenant, votre twig est assez propre (retour à la validation précédente)