Je dois appliquer les changements introduits dans une branche à une autre branche. Je peux utiliser la sélection de cerises pour faire cela. Cependant, dans mon cas, je souhaite appliquer des modifications qui ne sont pertinentes que pour un seul fichier, je n'ai pas besoin de sélectionner le commit entier. Comment faire ça?
108
Réponses:
Vous avez différentes options en fonction de ce que vous souhaitez réaliser:
Si vous souhaitez que le contenu du fichier soit le même que celui de la branche cible, vous pouvez utiliser
git checkout <branch> -- <filename>
. Cependant, cela ne «sélectionnera pas» les changements qui se sont produits dans un seul commit, mais prendra simplement l'état résultant dudit fichier. Donc, si vous avez ajouté une ligne dans un commit, mais que les commits précédents ont davantage changé, et que vous voulez seulement ajouter cette ligne sans ces autres changements, alors une extraction n'est pas ce que vous voulez.Sinon, si vous souhaitez appliquer le correctif introduit dans un commit à un seul fichier, vous avez plusieurs options. Vous pouvez exécuter
git cherry-pick -n
, c'est-à-dire sans le valider, éditer le commit (par exemple réinitialiser tous les fichiers en utilisantgit reset -- .
et ajouter uniquement le fichier que vous voulez réellement changer en utilisantgit add <filename>
). Ou vous pouvez créer le diff pour le fichier et appliquer le diff alors:la source
Créez un
patch file
et appliquez-le.ÉDITER:
Puisque vous devez prendre les modifications d'un commit, créez le correctif comme ceci:
la source
git diff sha1
(ougit diff branch
- c'est la même chose si la branche pointe vers le même hachage) ne produira qu'un diff du répertoire de travail actuel par rapport à ce hachage, mais pas ce qui change un commit introduit seul.git checkout
avec un nom de fichier est le bon marteau pour ce clou. Ces deux options sont inutilement complexes.checkout
cela ne fonctionnera pas, car cela peut impliquer d'autres modifications précédentes indésirables et peut ne pas contenir les modifications apportées dans la branche actuelle.Une autre chose pratique à faire est d'obtenir le correctif localement, puis d'utiliser:
Ce n'est cependant pas une sélection.
la source
Git a tout prêt :)
Juste utiliser
git checkout <sha> <path-to-file>
la source
cela fonctionne si vous voulez qu'un seul fichier d'une autre branche soit copié dans la branche de travail actuelle
la source
Voici ce que vous recherchez:
sha1 est facultatif
la source
Ce que j'ai tendance à faire, c'est d'utiliser
git ls-tree
fais juste:
Cela affichera tous les noms de fichiers correspondant à votre grep et donnera les clés SHA1 des fichiers dans le commit.
Git show peut également être utilisé sur des fichiers en dehors de votre branche. l'utilisation
>
de votre shell pour diriger la sortie dans un fichier vous donne le résultat que vous recherchez.la source
Vous pouvez essayer de faire ceci:
Par exemple:
la source
déplace les fichiers vers l'étape de pré-validation
supprime de la mémoire
Maintenant, votre branche est assez propre (retour au commit précédent)
la source