J'ai supprimé tout le contenu d'un dossier et celui-ci est vide. J'avais toujours une copie dans mon dépôt distant. Mais quand j'ai fait un git pull
Cela n'a pas remis les fichiers supprimés n'est-ce pas supposé faire ça?
J'ai donc fait des recherches et vu que vous pouvez restaurer 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?
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
Si vous n'avez pas encore indexé (git add
) vos modifications, vous pouvez rétablir le contenu d'un répertoire:
git checkout -- path/to/folder
Si la suppression est déjà indexée, vous devez d'abord la réinitialiser:
git reset -- path/to/folder
git checkout -- path/to/folder
git reset --hard HEAD
Trouver le dernier commit qui a affecté le chemin donné. Comme le fichier n'est pas dans la validation HEAD, cette validation doit l'avoir supprimé.
git rev-list -n 1 HEAD -- <file_path>
Puis vérifiez la version à la validation avant, en utilisant le curseur (^
) symbole:
git checkout <deleting_commit>^ -- <file_path>
git reset --hard <revision>
Si vous n'avez pas encore validé vos modifications, vous pouvez rétablir le contenu ou un répertoire:
git checkout -- removed_directory
Si vous voulez annuler toutes les modifications faites:
git reset --hard HEAD
La seule chose qui a fonctionné pour moi a été de récupérer le dépôt dans un autre dossier. Supposons que le dépôt actuel soit dans /home/me/current
.
J'ai ensuite fait
git clone /home/me/current /home/me/temp
Cela fait un clone séparé du repo dans /home/me/temp
Je peux maintenant aller à /home/me/temp
et fais ce que je veux. Par exemple
git reset --hard commit-hash-before-delete
Maintenant, je peux copier le dossier supprimé
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
Et supprimez le dossier temporaire
rm -rf /home/me/temp
Les exemples de
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
NE FONCTIONNE PAS
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.
D'autres exemples comme
git reset --hard HEAD
sont destructifs au-delà des fichiers supprimés. Tout autre changement sera également perdu.
De même
git reset --hard some-commit
perdra tous les commits après some-commit
Si vous ne spécifiez pas un fichier spécifique, vous devriez pouvoir extraire le contenu complet d'un commit spécifique. Comme: git checkout 264794319e9695ba843cd6
(en supposant que ce hachage a tous vos fichiers dans le bon état).
La raison pour laquelle pull
ne restaure pas les fichiers est que git considère vos suppressions comme la modification la plus récente, et l'applique en plus de tout ce que vous extrayez.
(Je recommanderais d'expérimenter dans une nouvelle branche.)