Comment prendre un fichier git diff et l'appliquer à une branche locale qui est une copie du même référentiel?

492

J'ai un fichier .diff créé par un collègue et je voudrais appliquer les modifications répertoriées dans ce fichier diff à ma branche locale du même référentiel. Je n'ai pas accès au PC ou à la branche de ce travailleur qui a été utilisé pour générer ce fichier diff.

Évidemment, je pouvais aller ligne par ligne et tout retaper, mais je préfère ne pas soumettre le système à une erreur humaine. Quelle est la façon la plus simple de procéder?

Mike_K
la source

Réponses:

747

Copiez le fichier diff à la racine de votre référentiel, puis procédez comme suit:

git apply yourcoworkers.diff

Plus d'informations sur la applycommande sont disponibles sur sa page de manuel .

Soit dit en passant: une meilleure façon d'échanger des validations entières par fichier est la combinaison des commandes git format-patchsur l'expéditeur puis git amsur le récepteur, car elle transfère également les informations sur la paternité et le message de validation.

Si l'application de patch échoue et si les validations à partir desquelles le diff a été généré se trouvent réellement dans votre référentiel, vous pouvez utiliser l' -3option applyqui essaie de fusionner les modifications.

Il fonctionne également avec le tuyau Unix comme suit:

git diff d892531 815a3b5 | git apply
Philipp
la source
3
Merci pour la réponse, mais cela a provoqué une erreur en disant, le patch a échoué: filename.php: 202 erreur: filename.php: le patch ne s'applique pas. La bonne nouvelle est que ce n'est pas le premier nom de fichier dans le fichier, donc il aurait au moins pu traiter une partie du fichier. Des pensées?
Mike_K
4
Vous semblez également avoir apporté des modifications à ce fichier qui empêchent le correctif de fonctionner. Pour résoudre ce problème, vous pouvez valider vos modifications, créer une nouvelle branche, la réinitialiser sur la validation où vous et votre collègue avez divergé, appliquer le correctif, le valider, puis fusionner les deux branches.
Philipp
3
@orlybg Lorsque vous ne l'avez pas encore validé, faites git reset --hardpour retourner votre arbre de travail au dernier commit. Lorsque vous l'avez déjà validé, ajoutez la révision à laquelle vous souhaitez revenir.
Philipp
5
@orlybg Désolé, mais vous êtes foutu. Git crée uniquement un point de contrôle auquel vous pouvez revenir lorsque vous effectuez une validation. C'est pourquoi de nombreux guides git recommandent de s'engager tôt et souvent .
Philipp
4
@orlybg à tout le moins, exécutez git stashavant d'effectuer une action que vous souhaiterez peut-être inverser après. Dans tous les cas, vous pouvez ramener votre réserve et vous engager ultérieurement.
maurice