2009-07-28 12 views
3

La question est liée à la question "How to restore Git after fatal file system error?", mais pour un seul fichier.Restaurer un fichier depuis Git?

Je dois aller au dernier état 2009-07-27 23:58, où j'ai besoin du fichier:

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml 

Comment puis-je restaurer le fichier après un accident?

AJOUTÉ: Où trouver le fichier? Que sont-ils censés faire?

la pointe de Graham

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 

la pointe de William

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 
+0

La faute de frappe a été corrigée. Il devrait être --since = '...' (ajouter un '=') –

Répondre

2

parfois je supprime un fichier ou un répertoire dans mon git local et je veux restaurer juste ce fichier. Je cours la commande suivante:

git checkout -- filenameOrDirectory 

Notez les espaces entre.

+0

Donc, sans et avec -, le fichier/répertoire est restauré à partir de la dernière validation. –

+1

oui, mais sa prise de votre référentiel local.Ainsi, par exemple, si vous avez eu récemment "git pull" puis modifié un fichier particulier, alors vous avez décidé que vous vouliez le restaurer au moment où vous avez fait le git pull pour la dernière fois, vous pouvez utiliser cette commande. Je trouve cela très pratique. Il restaure les fichiers à leur dernier état git pull qui est vraiment votre état repo local. Tu peux l'essayer. Supprimez tout fichier ou répertoire, puis exécutez-le, il doit être restauré. – j2emanue

4

Si vous avez besoin pour obtenir un seul fichier sur un commit qui est dans votre référentiel, git checkout fera pour toi. Plus précisément:

git checkout <sha> <filename> 

récupérera le fichier < nom> de la validation < sha> dans votre copie de travail en cours. peut être n'importe quelle référence à n'importe quel commit, donc ce pourrait être un nom de branche, un nom de balise, HEAD ^^^^, ou quelque chose comme ça que vous voulez ...

+0

"Pas seulement un diagramme de classe" est le message du journal pour ce commit, pas l'identifiant de validation. Vous avez besoin d'un moyen de référencer la validation - tel que l'ID SHA1 pour la validation. git log devrait être en mesure de vous donner ça. – Graham

+0

Où dois-je exécuter la commande? J'ai mis à jour l'erreur. –

+1

Passez au niveau supérieur de votre répertoire git. Lancez 'git ls-tree -r - nom-seul maître' pour vérifier si le fichier que vous voulez récupérer est en 'maître' (à partir de la capture d'écran incluse, il ressemble à 2009-07-27 23:58 état). Lancez 'git checkout master - ', où '' apparaît dans la sortie de git-ls-tree –

1

Avez-vous une copie non corrompue du référentiel partout? Si c'est le cas, tirez de là vers votre répertoire de travail, puis extrayez le fichier. Vous pouvez faire:

 
git log --since='2009-07-27 23:58' --pretty=oneline -n 1 

pour obtenir le hachage que vous voulez et ensuite obtenir le fichier via:

 
git checkout <file> <hash> 

Si vous avez aucune copie de travail incorruptibles du référentiel, vous pouvez essayer « fsck git », mais vos chances de succès sont faibles ou nulles si des fichiers ont été perdus.

+0

J'ai ajouté les erreurs de votre commande à la question. –

Questions connexes