web-dev-qa-db-fra.com

git récupère le fichier supprimé où aucune validation n'a été faite après la suppression

J'ai supprimé des fichiers. 

Je n'ai pas encore commis. 

Je souhaite réinitialiser mon espace de travail pour récupérer les fichiers. 

J'ai fait un git checkout ..

Mais les fichiers supprimés sont toujours manquants.

Et git status montre:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

Pourquoi git checkout . ne réinitialise-t-il pas l'espace de travail sur HEAD?

672
Homan

La sortie vous indique ce que vous devez faire. git reset HEAD cc.properties etc. 

Cela désamorcera l’opération rm. Après cela, réexécuter git status vous indiquera que vous devez créer un git checkout -- cc.properties pour récupérer le fichier. 

Mise à jour: J'ai ceci dans mon fichier de configuration

$ git config alias.unstage
reset HEAD

que j'utilise habituellement pour déconstruire des trucs.

686
Noufal Ibrahim

Vous avez mis en scène la suppression, vous devez donc:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout . extrait uniquement de l'index où la suppression a déjà été effectuée.

184
CB Bailey

Il suffit de faire git checkout path/to/file-I-want-to-bring-back.txt

143
seddonym

Pour récupérer toutes les suppressions unstaged en même temps, automatiquement, sans spécifier chaque chemin:

git ls-files -d | xargs git checkout --

Pour récupérer toutes les suppressions staged en même temps, automatiquement, sans spécifier chaque chemin:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --
119
PaoloC

Puisque vous utilisez un git checkout ., il semble que vous tentiez de restaurer votre branche dans le dernier état de validation. 

Vous pouvez y parvenir avec un git reset HEAD --hard

Attention

Cela pourrait supprimer toutes vos dernières modifications et décaler vos modifications, par exemple, vous pourriez perdre du travail. C'est peut être ce que vous voulez, mais vérifiez la documentation pour vous en assurer.

71
Paul T

si vous avez utilisé

git rm filename

supprimer un fichier puis

git checkout path/to/filename

ne fonctionne pas, alors dans ce cas

git checkout HEAD^ path/to/filename

devrait marcher

44
Aurangzeb

Voici la commande qui m'a aidé sur mon mac. J'ai essayé quelques-unes des autres solutions, mais elles ne fonctionnaient pas pour moi.

Version de Git sur OSX Mavericks

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

Commande

git checkout HEAD -- path/to/file/file.cc
27
Chris Hinshaw
git checkout HEAD -- client/src/pp_web/index.cljs
17
Dustin Getz

Si vous voulez restaurer tous les fichiers à la fois

N'oubliez pas d'utiliser le point, car il indique à git de récupérer tous les fichiers.

Cette commande réinitialisera la tête et annulera toutes les modifications:

$ git reset HEAD . 

Puis lancez ceci pour restaurer tous les fichiers:

$ git checkout .

Ensuite, en faisant un statut de git, vous aurez:

$ git status
On branch master
Your branch is up-to-date with 'Origin/master'.
14
Casper Wilkes

Utilisez git ls-files pour extraire les fichiers supprimés (-d) ou modifiés (-m).

git checkout $(git ls-files -d)

voir Comment puis-je restaurer uniquement les fichiers modifiés sur une caisse Git?

12
rickfoosusa

Voulez-vous voir ceci

cela vaut pour les cas où vous avez utilisé

git checkout -- .

avant de commettre quelque chose.

Vous pouvez également vouloir vous débarrasser des fichiers créés qui n'ont pas encore été créés. Et vous ne les voulez pas. Avec :

git reset -- .

Vous avez trouvé cet article en cherchant des réponses sur la suppression d'un fichier supprimé de mon répertoire de travail après une fusion dans une autre branche. Aucune validation n'a encore été effectuée après la fusion . Comme il s'agissait d'une fusion en cours, je ne pouvais pas simplement le rajouter en utilisant 

$ git reset <commitid#-where-file.cpp-existed> file.cpp

En plus de la réinitialisation, je devais faire une autre étape pour ramener le fichier: 

$ git checkout -- file.cpp
6
user2453404

Si vous n'avez pas validé de modifications, tout ce que vous avez à faire est de les cacher et vous revenez au dernier commit en cours.

git stash
git stash clear
git clean 
4
Rick

si vous recherchez un répertoire supprimé.

 git checkout ./pathToDir/*
3
PPB

Si vous avez installé ToroiseGIT, sélectionnez simplement l'option "Revert ..." pour le menu contextuel du dossier parent.

1
Vasyl Shyrochuk

Vous pouvez réinitialiser votre espace de travail (et récupérer les fichiers supprimés) 

git checkout ./*

ATTENTION: engagez tout travail que vous souhaitez conserver en premier.

1

Pour moi ce qui a fonctionné était git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

Par exemple git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(exécuté dans la branche dans laquelle nous voulons que le fichier aille)

Une fois cette commande exécutée, le fichier restauré existera à l’emplacement initial (qui devra être com-

1
Dinis Cruz

J'ai eu le même problème, mais aucune des solutions ci-dessus n'a fonctionné pour moi. Ce que j'ai fini par faire était:
- créer un fichier vide du même nom 
- compare ce fichier à son historique local
- copier l'historique dans un fichier vide.

0
theEUG