Après le dernier commit, j'ai modifié un tas de fichiers dans ma copie de travail, mais je veux annuler les modifications apportées à l'un de ces fichiers, comme pour le réinitialiser au même état que le commit le plus récent.
Cependant, je veux seulement annuler les modifications de copie de travail de ce seul fichier, rien d'autre avec lui.
Comment je fais ça?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
pour 2 validations à partir de la plus récente, ouHEAD^^^
pour 3 validations de retour. Vous pouvez également utiliserHEAD~2
, ouHEAD~3
, ce qui devient plus pratique si vous souhaitez revenir en arrière, tandis queHEAD^2
signifie "le deuxième parent de cette validation"; en raison des validations de fusion, une validation peut avoir plusieurs validations précédentes, donc avecHEAD^
un nombre sélectionne lequel de ces parents, tandis qu'avecHEAD~
un nombre sélectionne toujours le premier parent mais ce nombre de validations revient. Voirgit help rev-parse
pour plus de détails.Utilisez simplement
Cela remplacera le nom de fichier par la dernière version de la branche actuelle.
AVERTISSEMENT: vos modifications seront annulées - aucune sauvegarde n'est conservée.
la source
git checkout x
et x se trouve être un nom de branche ainsi qu'un nom de fichier, je ne sais pas quel est le comportement par défaut mais je pense que git supposera que vous voulez passer à la branche x. Lorsque vous utilisez,--
vous dites que ce qui suit est un ou plusieurs noms de fichier.--
. Bien que toujours correct, comme le souligne @hasen, s'il y a une ambiguïté entre le nom de fichier et les noms de branche, vous pouvez vous retrouver avec un comportement très indésirable ici!--
, agréable et facile. Lorsque vous nommez des branches en utilisant des noms de fichiers, il doit y avoir une mauvaise pensée quelque part ...Je l'ai utilisé aujourd'hui car j'ai réalisé que mon favicon avait été écrasé il y a quelques commits il y a quelques temps lorsque je suis passé à la version drupal 6.10, j'ai donc dû le récupérer. Voici ce que j'ai fait:
la source
git log --oneline <filename>
vous donnera un journal plus compact et n'inclura que les modifications apportées au fichier spécifiquegit reflog <filename>
Si votre fichier est déjà mis en scène (se produit lorsque vous effectuez un ajout de git, etc. après la modification du fichier) pour annuler les modifications.
Utilisation
alors
Si ce n'est déjà fait, utilisez simplement
la source
Si vous souhaitez simplement annuler les modifications du commit précédent sur ce fichier, vous pouvez essayer ceci:
Cela extraira le fichier tel qu'il était avant le dernier commit. Si vous souhaitez revenir en arrière quelques fois, utilisez la
branchname~n
notation.la source
branchname^
J'ai fait via git bash:
(use "git checkout -- <file>..." to discard changes in working directory)
la source
Je suis toujours confus avec cela, voici donc un cas de test de rappel; disons que nous avons ce
bash
script à testergit
:À ce stade, la modification n'est pas mise en scène dans le cache, tout
git status
comme:Si à partir de ce point, nous le faisons
git checkout
, le résultat est le suivant:Si au contraire nous le faisons
git reset
, le résultat est:Donc, dans ce cas - si les modifications ne sont pas échelonnées,
git reset
cela ne fait aucune différence, tout engit checkout
écrasant les modifications.Maintenant, disons que le dernier changement par rapport au script ci-dessus est mis en scène / mis en cache, c'est-à-dire que nous l'avons également fait
git add b.txt
à la fin.Dans ce cas,
git status
à ce stade est:Si à partir de ce point, nous le faisons
git checkout
, le résultat est le suivant:Si au contraire nous le faisons
git reset
, le résultat est:Donc, dans ce cas - si les modifications sont échelonnées, elles
git reset
feront essentiellement des changements échelonnés en changements non échelonnés - alors qu'ellesgit checkout
écraseront complètement les changements.la source
Cette réponse concerne la commande nécessaire pour annuler les modifications locales qui se trouvent dans plusieurs fichiers spécifiques dans le même ou plusieurs dossiers (ou répertoires). Cette réponse répond spécifiquement à la question où un utilisateur a plus d'un fichier mais l'utilisateur ne veut pas annuler toutes les modifications locales:
Pour plusieurs fichiers dans le même dossier:
L'astérisque ci-dessus fait l'affaire de l'annulation de tous les fichiers à cet emplacement sous nom1 / nom2.
Remarque: nom1, nom2, nomA, sous-dossier - tous ces exemples de noms de dossier indiquent le dossier ou le package dans lequel le ou les fichiers en question peuvent résider.
la source
Je restaure mes fichiers en utilisant l'identifiant SHA, ce que je fais est
git checkout <sha hash id> <file name>
la source
Pour moi, seul celui-ci a fonctionné
la source
Si vous n'avez pas encore poussé ou partagé votre commit:
la source
S'il est déjà validé, vous pouvez annuler la modification du fichier et valider à nouveau, puis écraser la nouvelle validation avec la dernière validation.
la source
Je ne sais pas pourquoi mais quand j'essaye d'entrer mon code, il apparaît comme une image.
la source