Restaurer un dossier Supprimé dans un git repo
j'ai supprimé tout le contenu d'un dossier et le dossier est vide. J'en avais encore une copie dans ma télécommande. Mais quand j'ai fait un git pull
il n'avait pas remis les fichiers supprimés n'est pas censé faire ça?
j'ai Donc fait quelques recherches et vu que vous pouvez restaurer un fichier
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?
6 réponses
Tout ce que vous pouvez faire avec un fichier, vous pouvez le faire avec un dossier aussi.
Aussi la note de Trouver et de restaurer un fichier supprimé dans un dépôt Git
les fichiers sont supprimés de l'arbre de travail mais pas encore engagés:
Si vous n'avez pas encore indexé ( git add
) vos modifications, vous pouvez restaurer le contenu d'un répertoire:
git checkout -- path/to/folder
si la suppression est déjà indexée, vous devez réinitialiser le premier:
git reset -- path/to/folder
git checkout -- path/to/folder
restaurer l'arbre de travail complet( pas un seul dossier), mais perdre tous les changements non engagés
git reset --hard HEAD
quand les fichiers sont supprimés dans une propagation passée:
trouver le dernier commit qui a affecté le chemin donné. Comme le fichier n'est pas dans la propagation principale, cette propagation a dû le supprimer.
git rev-list -n 1 HEAD -- <file_path>
puis vérifier la version à la propagation avant, en utilisant le caret ( ^
) symbole:
git checkout <deleting_commit>^ -- <file_path>
restaurer l'arbre entier de travail d'un commit lointain
git reset --hard <revision>
si vous n'avez pas encore activé vos modifications, vous pouvez inverser le contenu ou un répertoire:
git checkout -- removed_directory
si vous voulez revenir à toutes les modifications faites:
git reset --hard HEAD
la seule chose qui a fonctionné pour moi était de vérifier le rapport dans un autre dossier. Supposons que la pension courante se trouve dans /home/me/current
.
puis j'ai fait un
git clone /home/me/current /home/me/temp
ce fait un clone séparé de la pension dans /home/me/temp
je peux maintenant aller à /home/me/temp
et faire ce que je veux. Par exemple
git reset --hard commit-hash-before-delete
maintenant je peux copier le dossier de fichier supprimé retour
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
et supprimer le dossier temp
rm -rf /home/me/temp
les exemples de
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
NE TRAVAILLE 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.
autres exemples comme
git reset --hard HEAD
sont destructeurs au-delà des seuls fichiers supprimés. Tout autre changement sera également perdu.
de même
git reset --hard some-commit
perdra toutes les propagations après some-commit
Si vous ne spécifiez pas un fichier spécifique, vous devriez être en mesure de tirer le contenu complet d'un spécifique de commettre. Comme: git checkout 264794319e9695ba843cd6
(en supposant que le hash a tous vos fichiers à l'état de droit).
la raison pour laquelle pull
ne restaure pas les fichiers est que git voit vos suppressions comme le changement le plus récent, en appliquant cela en plus de ce que vous tirez.
(je recommande d'expérimenter dans une nouvelle branche.)
pour les suppressions sans engagement, C'est aussi simple que cela:
git reset HEAD rel/chemin/vers/supprimé/annuaire/*
Rt Cliquez sur le projet --> l'Équipe --> Reset
Dans le type de réinitialisation, sélectionnez réinitialisation matérielle. Cela répliquera votre dépôt distant dans votre espace de travail.