git recover fichier supprimé où aucune propagation n'a été faite après la suppression

j'ai supprimé quelques fichiers.

Je n'ai pas encore commis.

je veux 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 à HEAD ?

621
git
demandé sur LostMyGlasses 2012-08-14 20:27:38

20 réponses

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

cette opération va détruire l'opération rm. Après cela, exécuter à nouveau un git status vous indiquera que vous devez faire 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égrafer des trucs.

638
répondu Noufal Ibrahim 2014-03-03 17:55:49

vous avez mis en scène la suppression si vous avez besoin de faire:

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

git checkout . n'apparaît que dans l'index lorsque la suppression a déjà été échelonnée.

168
répondu CB Bailey 2012-08-14 16:31:12

Just do git checkout path/to/file-I-want-to-bring-back.txt

134
répondu seddonym 2014-01-23 11:57:05

pour récupérer toutes les suppressions non marquées à la fois, automatiquement, sans spécifier chaque chemin unique:

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

pour récupérer toutes les suppressions échelonnées à la fois, automatiquement, sans spécifier chaque chemin unique:

git status | grep 'deleted:' | awk '{print }' | xargs git checkout --
115
répondu PaoloC 2014-11-12 17:29:51

puisque vous faites un git checkout . , il semble que vous essayiez de restaurer votre branche à son dernier état de propagation.

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

Avertissement

faire ceci peut supprimer toutes vos dernières modifications et les décélérer, par exemple, vous pouvez perdre du travail. peut être ce que vous voulez, mais de vérifier les docs pour s'en assurer.

66
répondu Paul T 2015-10-30 19:34:40

si vous avez utilisé

git rm filename

pour supprimer un fichier, puis

git checkout path/to/filename

ne fonctionne pas, donc dans ce cas

git checkout HEAD^ path/to/filename

devrait fonctionner

35
répondu Aurangzeb 2018-09-14 10:37:40

Voici la commande qui m'a aidé sur mon mac. J'ai essayé quelques autres solutions, mais ils n'ont pas de travail pour moi.

version 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
26
répondu Chris Hinshaw 2014-09-30 13:06:11
git checkout HEAD -- client/src/pp_web/index.cljs
16
répondu Dustin Getz 2015-04-17 20:51:46

si vous voulez restaurer tous les fichiers à la fois""

N'oubliez pas d'utiliser la période car elle dit à git de saisir tous les fichiers.

cette commande va réinitialiser la tête et dégrafer tous les changements:

$ git reset HEAD . 

ensuite, exécutez ceci pour restaurer tous les fichiers:

$ git checkout .

alors en faisant un statut git, vous obtiendrez:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

14
répondu Casper Wilkes 2015-02-10 14:39:55

Faites ce que vous pouvez souhaitez voir ce

qui va 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 n'en voulez pas. Avec:

git reset -- .
8
répondu Paulo Linhares - Packapps 2017-05-23 12:10:54

trouvé ce post en cherchant des réponses sur la façon de supprimer un fichier qui a été supprimé dans mon répertoire de travail après une fusion de la branche d'un autre. Pas d'enregistrement a été encore faite après la fusion. Puisqu'il s'agissait d'une fusion en cours, Je ne pouvais pas simplement l'ajouter en utilisant:

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

j'ai dû faire une autre étape en plus de la réinitialisation pour ramener le fichier:

$ git checkout -- file.cpp
5
répondu user2453404 2015-09-15 19:23:48

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?

5
répondu rickfoosusa 2018-06-20 01:38:56

si vous n'avez pas commis de changements, tout ce que vous avez à faire est de cacher ces changements et vous serez de retour au dernier commit de travail.

git stash
git stash clear
git clean 
4
répondu Rick 2015-03-08 22:23:43

si vous recherchez un répertoire supprimé.

 git checkout ./pathToDir/*
3
répondu PPB 2015-06-08 13:52:56

si vous avez installé ToroiseGIT, sélectionnez simplement" Revert..."élément de menu pour le dossier parent popup-menu.

1
répondu Vasyl Shyrochuk 2014-12-07 16:12:26

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)

après l'exécution de cette commande, le fichier restauré existera à l'endroit d'origine (qui devra être Comité)

1
répondu Dinis Cruz 2016-06-08 13:44:14

je cherchais une réponse pour cela et a constaté qu'un simple

git checkout ./*

fera l'affaire.

1
répondu Henrique Florêncio 2018-04-11 20:58:30

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 avec le même nom

- comparer ce fichier avec son histoire locale

- copiez l'historique pour vider le fichier.

0
répondu theEUG 2016-12-05 09:32:05

j'ai également supprimé tous mes fichiers par accident et restauré en utilisant la commande suivante:

$ git config alias.unstage
$ git checkout HEAD^ *
0
répondu Sarvar Nishonboyev 2017-09-12 14:14:02

1.Trouvez cette propagation particulière à laquelle vous voulez revenir en utilisant:

   git log
This command will give you a list of commits done by you .

2.Revenir à cet engagement en utilisant:

    git revert <commit id> 

maintenant votre branche locale aurait tous les fichiers en particulier

-1
répondu ashu17188 2017-03-09 12:22:18