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?

45
demandé sur Nick Volynkin 2015-06-16 21:18:23
la source

6 ответов

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> 
135
répondu Nick Volynkin 2017-05-23 14:54:50
la source

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
2
répondu Ivan Mushketyk 2015-06-16 21:22:40
la source

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

2
répondu gman 2016-12-06 08:17:18
la source

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.)

0
répondu lostphilosopher 2015-06-16 21:21:48
la source

pour les suppressions sans engagement, C'est aussi simple que cela:

git reset HEAD rel/chemin/vers/supprimé/annuaire/*

-1
répondu justadev 2016-08-13 00:03:49
la source

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.

-2
répondu Prabodh Mhalgi 2015-06-16 21:21:37
la source

Autres questions sur git git-checkout