J'ai supprimé tout le contenu d'un dossier et le dossier est vide. J'en avais encore une copie dans mon repo distant. Mais quand j'ai fait un, git pull
il n'a pas remis les fichiers supprimés, n'est-ce pas censé le faire?
J'ai donc fait quelques recherches et j'ai vu que vous pouvez rétablir un fichier en faisant
git checkout <revision> -- <name of file>
Mais cela ne fonctionne que sur les fichiers.
Comment puis-je récupérer tous les fichiers dans le répertoire?
git
git-checkout
json2021
la source
la source
git status
vous donnera un indice sur la ou les commandes à exécuterRéponses:
Tout ce que vous pouvez faire avec un fichier, vous pouvez aussi le faire avec un dossier.
Notez également Rechercher et restaurer un fichier supprimé dans un référentiel Git
Les fichiers sont supprimés de l'arborescence de travail mais pas encore validés:
Si vous n'avez pas encore indexé (
git add
) vos modifications, vous pouvez rétablir le contenu d'un répertoire:Si la suppression est déjà indexée, vous devez d'abord la réinitialiser:
Restaurez l'arborescence de travail complète (pas un seul dossier), mais perdez toutes les modifications non validées
Lorsque des fichiers ont été supprimés dans un commit dans le passé:
Trouvez le dernier commit qui a affecté le chemin donné. Comme le fichier n'est pas dans le commit HEAD, ce commit doit l'avoir supprimé.
Ensuite, vérifiez la version lors de la validation avant, en utilisant le
^
symbole caret ( ):Restaurez l'arbre de travail complet à partir d'un commit distant
la source
git checkout -- path/to/folder/*
ne fonctionne pas Remarque: la question est de savoir comment restaurer un dossier pas un fichierHow can I retrieve all the files inside the directory
signifie à la fois le répertoire et ses fichiers. Mais la commande ne fonctionne étonnamment pas pour moi aussi. Je me souviens qu'il y a un an.git checkout -- path
ougit checkout -- 'path/*'
. Dans votre exemple, vous supprimezgit rm
ce que l'OP ne semblait pas faire. J'ai ajouté des instructions pour un tel cas. Merci!git checkout "<deleting_commit>^" -- <file_path>
Si vous n'avez pas encore validé vos modifications, vous pouvez rétablir le contenu ou un répertoire:
Si vous souhaitez annuler toutes les modifications, procédez comme suit:
la source
git checkout -- removed_directory
ne fonctionne pasgit checkout -- removed_directory
a fonctionné pour moi, mais j'ai déjà créé ce répertoire (par l'checkout
un des fichiers de ce répertoire). Après la création, tous les fichiers ont été restaurés dans le dossier par cette commande.La seule chose qui a fonctionné pour moi était de récupérer le dépôt dans un autre dossier. Supposons que le dépôt actuel est dans
/home/me/current
.J'ai ensuite fait
Cela fait un clone séparé du repo dans
/home/me/temp
Je peux maintenant aller
/home/me/temp
et faire ce que je veux. Par exempleMaintenant, je peux recopier le dossier du fichier supprimé
Et supprimez le dossier temporaire
Les exemples de
NE FONCTIONNENT PAS
D'autres exemples comme
sont destructeurs au-delà des fichiers supprimés. Toutes les autres modifications seront également perdues.
De même
perdra tous les commits après
some-commit
la source
Depuis git 2.24.0, il existe une nouvelle commande git expérimentale: git restore
la source
Vous pouvez restaurer des fichiers ou un dossier avec git restore.
Ici, master ~ 1 rétablit votre dossier en révision "1" depuis votre branche master.
Source: https://git-scm.com/docs/git-restore
la source
Si vous ne spécifiez pas de fichier spécifique, vous devriez être en mesure d'extraire le contenu complet d'un commit spécifique. Comme:
git checkout 264794319e9695ba843cd6
(en supposant que le hachage a tous vos fichiers dans le bon état).La raison
pull
pour laquelle il ne s'agit pas de restaurer des fichiers est que git considère vos suppressions comme le changement le plus récent, en l'appliquant en plus de tout ce que vous tirez.(Je recommanderais d'expérimenter dans une nouvelle branche.)
la source
pour les suppressions non validées, c'est aussi simple que ceci:
git reset HEAD rel / chemin / vers / supprimé / répertoire / *
la source