# Git : récupérer le contenu un répertoire effacé par erreur

**URL:** <https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000>\
**Category:** Programmation\
**Created:** [Octobre 7, 2020, 5:17 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000 "2020-10-07T17:17:28Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 7, 2020, 5:17 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/1 "2020-10-07T17:17:28Z")

</div>

Bonjour,

j’ai heureusement fait un _git add ; git commit -a_ très récemment, et malheureusement un _rm_ dans le même mauvais répertoire (c’est _rm_ qui est mauvais, pas le répertoire, … bon)

Je cherche la commande de _git_ qui rétablirait tous ces fichiers (5 ans de comptes-rendus hebdomadaires d’utilisation… hebdomadaire!)

J’ai essayé:  
_git checkout_ de différentes façons, sans trouver la bonne formule, je crains de faire une manœuvre irréversible, la loi de Murphy étant grandement favorisée par mon ignorance!

Merci

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Octobre 7, 2020, 5:21 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/2 "2020-10-07T17:21:52Z")

</div>

Le _rm_ a été fait sur la partie serveur ? si oui tu peux renvoyer ta branche de ton poste sur lune branche et effectué un merge avec la branche master.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 7, 2020, 5:43 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/3 "2020-10-07T17:43:50Z")

</div>

C’est uniquement en local, sur mon portable.  
Je n’ai utilisé aucune branche.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 7, 2020, 6:00 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/4 "2020-10-07T18:00:03Z")

</div>

J’ai fait  
_git checkout b6cdegst_  
(le numéro du dernier commit)  
qui n’ajoute rien !

_git log_  
me rappelle par son commentaire, qu’il est produit par un script maison.  
C’est peut-être un commit vide!  
Je vais revoir ça

merci pour votre aide

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Octobre 7, 2020, 6:01 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/5 "2020-10-07T18:01:11Z")

</div>

> [@josephtux](#):
>
> C’est uniquement en local, sur mon portable.  
> Je n’ai utilisé aucune branche.

Tu utilise git pour versionner des trucs sur ton portable hébergé sur ton portable ?  
Tu peux expliquer ce que tu fais exactement ?

---

<div class="post-metadata">

**Author:** ![Usinagaz-theReturn](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/f475e1/32.png) [@Usinagaz-theReturn](https://www.debian-fr.org/u/Usinagaz-theReturn)\
**Post date:** [Octobre 8, 2020, 7:24 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/6 "2020-10-08T07:24:25Z")

</div>

Bonjour,

`$ apt-cache search testdisk`  
pas testé …

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 8, 2020, 10:31 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/7 "2020-10-08T10:31:29Z")

</div>

> [@Usinagaz-theReturn](#):
>
> pas testé …

Ca serait bien d’éviter de répondre… plutôt que d’étaler ainsi ton ignorance, même du sujet ! ☹  
Si l’idée peut sembler intéressante, il faut l’utiliser depuis un autre système, sur le disque en question - donc non «&nbsp;fonctionnel&nbsp;» - et sauvegarder ce qui pourrait l’être vers une autre partition, hors ce disque dur !

* * *

> [@josephtux](#):
>
> 5 ans de comptes-rendus hebdomadaires d’utilisation… hebdomadaire!)

Et aucune sauvegarde régulière de ce genre de données qui semblent si importantes !?  
☹

> [@josephtux](#):
>
> C’est uniquement en local, sur mon portable.

Donc, tu ne commites aucunement ailleurs ?!

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 8, 2020, 11:57 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/8 "2020-10-08T11:57:01Z")

</div>

Je dispose bien entendu d’une sauvegarde sur disque externe, mais que je ne le transporte pas avec moi.

En urgence, j’espérais donc pouvoir utiliser _git checkout_, que j’utilise sur ce répertoire comme sauvegarde d’urgence.  
Sauf que je sais faire (je crois!) un _git commit -a_ en guise de sauvegarde, mais apparemment pas vraiment la commande git pour restaurer le dernier état «commité».

Chez moi, j’ai heureusement pu tout restaurer avec _rsync_.

Mais ma question demeure…

La commande git utilisée (non dans un script, mais dans un alias) est la suivante:

`git add ./*txt ./*pdf ; git commit --message='révision produite par « ***(l' alias) »'`

Merci

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 8, 2020, 12:12 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/9 "2020-10-08T12:12:58Z")

</div>

@Clochette

Je ne suis pas informaticien, et à part quelques petits scripts, je ne programme pas.  
En revanche j’écris beaucoup, et j’utilise beaucoup LaTeX.

J’utilise git de plus en plus pour avoir un historique de versions, surtout, initialement, avec LaTeX qu’il est très facile de casser dés que je veux modifier quelque-chose d’autre que du texte, et même pour retrouver d’anciennes versions de texte souvent ou tardivement remanié.

Pour ma prise de notes hebdomadaire, j’ai donc un alias qui m’ouvre le bon répertoire, charge vim avec l’entête de la réunion et la date après avoir déchiffré les fichiers de notes précédents, utilisés pour consultation en cours de réunion.  
Un script de fermeture fait l’inverse et en plus met à jour les fichiers par un «git commit».

Je n’utilise pas de réseau (à part internet, de chez moi, évidemment), mes seuls dépôts _git_ sont donc locaux, et même spécifiques à différents répertoires.

Les commandes git utilisent en priorité le dépôt git le plus proche dans l’arborescence.  
Autrement dit, elles ne se réfèrent au dépôt de la racine utilisateur que s’il n’y en a pas d’autre dans son «path» (son chemin ou son «dirname» si vous préférez).

En résumé,  
pour ces 2 répertoires de prise de notes, j’ai 2 scripts, ouverture et fermeture de séance, pour chacun des 2 répertoires (et 2 dépôts _git_), et pas de réseau.  
Je fais heureusement de «vraies» sauvegardes sur un disque dur externe, avec un script basé sur rsync, mais «git commit» est immédiat et systématique.

Merci pour votre intérêt

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 8, 2020, 12:31 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/10 "2020-10-08T12:31:06Z")

</div>

> [@josephtux](#):
>
> En résumé,

intéressant ton usage de git, pour ce besoin-là ! 😃

perso, je ne connais pas assez git pour apporter une réponse fiable ; j’avoue même que git m’exaspère assez ! 😉

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 8, 2020, 12:53 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/11 "2020-10-08T12:53:35Z")

</div>

D’après ce que j’ai cru comprendre:

_git log_ fournit un numéro d’identification du commit  
\*git checkout \<le n°\> place sur une sorte de branche provisoire (You are in ‹&nbsp;detached HEAD&nbsp;› state…) l’état de ce commit (pour moi actuellement, les fichiers \*txt et \*pdf, les pdf sont des courriels reçus, pas de LaTeX dans ce travail)

Mais je n’ai certainement pas compris car cette commande n’a eu aucun effet.

(Mes aliases sont incohérents, car git sauve mes notes avant chiffrage, ce qui n’assure évidemment pas vraiment la confidentialité recherchée! cette discussion vient de m’en faire prendre conscience!)

PS  
git est aussi très utile pour préserver l’historique de mon fichier d’aliases, «~.bash\_aliases», et les autres fichiers «~/.bash».

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 8, 2020, 2:05 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/12 "2020-10-08T14:05:44Z")

</div>

> [@josephtux](#):
>
> _git log_

affiche les différents commit 😉

> **[Git - git-log Documentation](https://git-scm.com/docs/git-log/fr)**

* * *

> [@josephtux](#):
>
> git checkout \<le n°\>

te permet de basculer d’une branche à l’autre, voire de restaurer des fichiers d’une branche de travail.

> **[Git - git-checkout Documentation](https://git-scm.com/docs/git-checkout/fr)**

* * *

Là, ton problème n’est pas un problème dû à un mauvaise usage de git.  
Ainsi, si c’était le cas, tu aurais peut-être pu faire : `git checkout -- <filename>`

Je ne vois pas comment git pourrait rétablir la situation qu’il ne connaît pas.  
Hormis, de faire un clone depuis ton git de sauvegarde, ou un `git pull`… pour récupérer les fichiers dans un état précédent.

* * *

Deux documentations vraiment utiles :

- le fameux petit guide git : [git - petit guide - no deep shit!](https://rogerdudler.github.io/git-guide/index.fr.html)
- le livre (en 3 langues, dont fr) : [Git - Book](http://git-scm.com/book/fr/)

Tu n’as vraiment besoin de rien d’autres pour essayer d’appréhender les profondeurs et délicatesses de git, si ce n’est des tutos bien fichus - et il en existe quelques uns.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 8, 2020, 2:20 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/13 "2020-10-08T14:20:03Z")

</div>

Voila l’erreur:  
D’une part j’omettais le «- -», accusé sans doute à tord de mon échec  
D’autre part je mettais «\*» comme noms de fichiers.  
Fichier\_\* n’est pas un nom valide pour une liste de fichiers, donc pas non plus «\*», sauf s’il est mis entre guillemets: «"\*"» fonctionne.

La formule (que j’ai utilisé dans mes tests) pour récupérer tous les fichiers effacés depuis le dernier commit 0123abc est donc, simplement:

`git checkout 0123abc -- "*"`

sans oublier les «- -» ni les guillemets autour de «\*»:  
`"*"`.

Merci pour ces liens (je me réfère à ProGit 2e édition en français, je crois que c’est le même que git-book).

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 8, 2020, 3:18 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/14 "2020-10-08T15:18:35Z")

</div>

Il y a aussi gitmagic (traduit en français)  
En ligne:  
[http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/)  
ou en pdf:  
[http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/book.pdf](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/book.pdf)

Qu’on trouve **dans le dépôt Debian: paquet gitmagic**

---

<div class="post-metadata">

**Author:** ![Usinagaz-theReturn](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/f475e1/32.png) [@Usinagaz-theReturn](https://www.debian-fr.org/u/Usinagaz-theReturn)\
**Post date:** [Octobre 8, 2020, 7:42 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/15 "2020-10-08T19:42:21Z")

</div>

> [@PengouinPdt](#):
>
> Ca serait bien d’éviter de répondre… plutôt que d’étaler ainsi ton ignorance, même du sujet !

Au temps pour moi, j’ai cru bien faire. C’est vrai que j’ignore ce qu’est **Git** , c’était certainement le mot clé dans ton titre. Toutes mes excuses. Pdt c’est Président directeur technique ?

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Octobre 12, 2020, 9:44 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/16 "2020-10-12T09:44:43Z")

</div>

Spécialement pour PengouinPdt 😉 , mais pour tout utilsateur de git et du shell bash.

Pour me simplifier le travail, bien que j’utilise rarement la facilité des branches sous GIT, mon prompt affiche l’existence d’un dépôt git dans le répertoire ou un répertoire parent en précisant la branche active.

Voici le script chargé dans .bashrc:[PS1rc.txt](https://www.debian-fr.org/uploads/short-url/56FWryHPtReyOakcHcBbdcQwhgF.txt) (1,8 Ko)  
(son extension est .sh ou rien du tout, et non .txt, nécessité par le filtre du forum)  
 ![promptBashGit_](https://www.debian-fr.org/uploads/default/original/2X/2/218b001c9dca014c36c2afe81fa0fe12d721c951.png)

 ![PromptBranch_](https://www.debian-fr.org/uploads/default/original/2X/a/abc0b7ff36bee7a4fb9c3d2d2647c4bce2302931.png)

PS  
Je ne sais plus d’où a été inspiré mon script, mais on peut en trouver un certainement plus professionnel ici: ([https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh](https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh))

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Octobre 12, 2020, 7:17 UTC](https://www.debian-fr.org/t/git-recuperer-le-contenu-un-repertoire-efface-par-erreur/83000/17 "2020-10-12T19:17:15Z")

</div>

J’utilise Bash comme shell mais j’ai ajouté un très forte valeur ajouté avec Powerline et les greffons sympa de Vim pour la gestion Git, cela me permet de jongler et visuellement savoir où j’en suis.

> **[GitHub - powerline/powerline: Powerline is a statusline plugin for vim, and...](https://github.com/powerline/powerline)**
>
> Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile.
