Réinitialisation matérielle d’un seul fichier

J’ai actuellement trois fichiers modifiés dans mon répertoire de travail. Cependant, je veux que l’un d’entre eux soit réinitialisé au statut HEAD.

En SVN, j’utiliserais svn revert (suivi de svn update si nécessaire) mais dans git je devrais utiliser git reset --hard . Cependant, cette commande ne peut pas fonctionner sur un seul fichier.

Est-il possible de supprimer un seul fichier et de le remplacer par une nouvelle copie HEAD?

Vous pouvez utiliser la commande suivante:

 git checkout HEAD -- my-file.txt 

… qui mettra à jour la copie de travail de my-file.txt et son état dans l’index avec celui de HEAD.

-- signifie essentiellement: traiter chaque argument après ce point comme un nom de fichier . Plus de détails dans cette réponse . Merci à VonC de l’ avoir signalé.

Réinitialiser à la tête:

Pour réinitialiser un seul fichier à HEAD:

 git checkout @ -- myfile.ext 

Notez que @ est l’abréviation de HEAD . Une ancienne version de git peut ne pas prendre en charge la forme abrégée.

Réinitialiser à l’index:

Pour réinitialiser un fichier unique à l’ index , en supposant que l’index n’est pas vide, sinon, sous HEAD:

 git checkout -- myfile.ext 

Le point est que pour être sûr, vous ne voulez pas omettre @ ou HEAD de la commande à moins que vous ne souhaitiez spécifiquement rétablir l’index uniquement.

Pour revenir en amont / maître, faites:

git checkout upstream/master -- myfile.txt

vous pouvez utiliser la commande ci-dessous pour réinitialiser un seul fichier

 git checkout HEAD -- path_to_file/file_name 

Liste tous les fichiers modifiés pour obtenir le path_to_file/filename access path_to_file/filename avec la commande ci-dessous

 git status 

Un moyen simple, pratique et pratique de vous sortir de l’eau chaude, surtout si vous n’êtes pas à l’aise avec git:

  1. Voir le journal de votre fichier

    git log myFile.js

    commettre 1023057173029091u23f01w276931f7f42595f84f Auteur: kmiklas Date: mar août 7 09:29:34 2018 -0400

    JIRA-12345 – Refactor avec nouvelle architecture.

  2. Notez le hachage de fichier:

    1023057173029091u23f01w276931f7f42595f84f

  3. Afficher le fichier en utilisant le hachage. Assurez-vous que c’est ce que vous voulez:

    git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js

  4. Rediriger le fichier vers une copie locale

    git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js

  5. Sauvegardez votre fichier actuel.

    cp myFile.js myFile.bak.js

  6. Ouvrez les deux fichiers dans votre éditeur de texte préféré.

    vim myFile.js
    vim myFile.07aug2018.js

  7. Copiez le code de collage de myFile.07aug2018.js dans myFile.js et enregistrez.

  8. Valider et pousser myFile.js

  9. Regardez à nouveau le journal et confirmez que votre fichier est correctement installé.

  10. Dites à vos clients de tirer le meilleur, regardez avec plaisir l’ancienne version en place.

Pas la solution la plus sexy ou la plus centrée sur Git, et certainement une réinitialisation / réversion “manuelle”, mais ça marche. Cela nécessite une connaissance minimale de git, et ne perturbe pas l’historique des validations.