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
?
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.
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.
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 --
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.
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
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
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'.
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 -- .
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
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?
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
si vous recherchez un répertoire supprimé.
git checkout ./pathToDir/*
si vous avez installé ToroiseGIT, sélectionnez simplement" Revert..."élément de menu pour le dossier parent popup-menu.
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é)
je cherchais une réponse pour cela et a constaté qu'un simple
git checkout ./*
fera l'affaire.
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.
j'ai également supprimé tous mes fichiers par accident et restauré en utilisant la commande suivante:
$ git config alias.unstage
$ git checkout HEAD^ *
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