{"id":1368,"date":"2026-07-09T09:47:28","date_gmt":"2026-07-09T08:47:28","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=1368"},"modified":"2026-07-09T09:47:38","modified_gmt":"2026-07-09T08:47:38","slug":"recuperer-stash-droppe","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2026\/07\/09\/recuperer-stash-droppe\/","title":{"rendered":"R\u00e9cup\u00e9rer un stash dropp\u00e9 par erreur"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vous venez de drop un stash important, et de rage vous avez ferm\u00e9 votre terminal ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pas de panique, j&rsquo;ai la suite de commandes qu&rsquo;il vous faut !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les \u00e9tapes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mais avant de vous donner la suite compl\u00e8te, je vais vous pr\u00e9senter les diff\u00e9rentes commandes qui la composent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\u00e8re \u00e9tape, retrouver les objets orphelins<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Git est une base de donn\u00e9es, qui contient diff\u00e9rents objets (commit, branche, stash\u2026), qui sont reli\u00e9s entre eux. Mais quand on droppe un stash, revert un commit\u2026, ces objets ne disparaissent pas tous de suite. Ils sont juste d\u00e9connect\u00e9s du reste, et deviennent injoignables (<em>unreachable<\/em>, dans la langue de Guillaume Secoue-Poire).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour retrouver ces objets, la commande \u00e0 utiliser est :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit fsck --unreachable\n<\/pre><\/div>\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">2\u00e8me \u00e9tape, ne garder que le type d&rsquo;objet qui nous int\u00e9resse<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans notre cas, il s&rsquo;agit d&rsquo;objet de type &lsquo;commit&rsquo;, et pour trouver ces objets, un simple grep suffit :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngrep commit\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">3\u00e8me \u00e9tape, r\u00e9cup\u00e9rer les hashs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cela, <a href=\"https:\/\/www.malekal.com\/comment-utiliser-la-commande-awk-avec-des-exemples\/\">AWK<\/a> est votre ami.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur chaque ligne obtenue avec les commandes pr\u00e9c\u00e9dentes, les colonnes sont s\u00e9par\u00e9es par un espace (le d\u00e9faut pour AWK), et la colonne qui nous int\u00e9ressse est la troisi\u00e8me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela donne donc :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nawk &#039;{print $3}&#039;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">4e \u00e9tape, afficher les infos de chaque commit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, il ne reste plus qu&rsquo;\u00e0 afficher les infos (date de cr\u00e9ation, message du stash) de chaque objet de type merge (pour git, un stash est un merge) :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nxargs git log --merge\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">La commande compl\u00e8te<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit fsck --unreachable | grep commit | awk &#039;{print $3}&#039; | xargs git log --merges\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Comment r\u00e9cuper notre pr\u00e9cieux stash ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La suite de commande pr\u00e9c\u00e9dente nous a permis de retrouver le hash du stash effac\u00e9. Pour r\u00e9cup\u00e9rer son contenu, il suffit de lancer :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit stash apply &lt;hash&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si on ne ferme pas tout de suite le terminal apr\u00e8s avoir dropp\u00e9 le stash, le hash du stash est toujours affich\u00e9, et on peut directement lancer la commance ci-dessus avec le hash.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et voil\u00e0 !<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;esp\u00e8re que cet article pourra vous \u00eatre utile, et vous \u00e9viter de devoir tout retaper.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous venez de drop un stash important, et de rage vous avez ferm\u00e9 votre terminal ? Pas de panique, j&rsquo;ai la suite de commandes qu&rsquo;il vous faut ! Les \u00e9tapes Mais avant de vous donner la suite compl\u00e8te, je vais &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2026\/07\/09\/recuperer-stash-droppe\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[12],"tags":[60],"class_list":["post-1368","post","type-post","status-publish","format-standard","hentry","category-divers","tag-git"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-m4","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1146,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/31\/commandes-git-a-utiliser-presque-au-quotidien\/","url_meta":{"origin":1368,"position":0},"title":"Quelques commandes git que j&rsquo;utilise (presque) au quotidien","author":"geekc","date":"31\/03\/2023","format":false,"excerpt":"Aujourd\u2019hui, j\u2019ai d\u00e9cid\u00e9 de parler d\u2019un outil que j\u2019utilise au quotidien dans ma vie professionnelle, le syst\u00e8me de gestion de version git. Avec cet outil j\u2019utilise certaines commandes tr\u00e8s utiles. Mais je n\u2019avais pas d\u2019id\u00e9e de comment contextualiser ces commandes pour vous en parler. Cet alors que je me suis\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":976,"url":"https:\/\/geekcommunicant.com\/blog\/2022\/12\/02\/gloubi-tuto-un-menu-interactif-hello-kitty\/","url_meta":{"origin":1368,"position":1},"title":"Gloubi tuto &#8211; un menu interactif Hello Kitty","author":"geekc","date":"02\/12\/2022","format":false,"excerpt":"Bienvenue sur ce premier gloubi tuto (pour en savoir plus sur les gloubi tutos) qui concerne un menu interactif avec Hello Kitty. Pr\u00e9sentation et explication de l\u2019existant Pour voir la source du script actuel, RDV sur cette page du site de notre nouvel adversaire dans la guerre du gloubi. Le\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1300,"url":"https:\/\/geekcommunicant.com\/blog\/2025\/04\/19\/correctif-decoupe-avec-contour-inkscape\/","url_meta":{"origin":1368,"position":2},"title":"Correctif d\u00e9coupe avec contour dans Inkscape","author":"geekc","date":"19\/04\/2025","format":false,"excerpt":"Dans un article pr\u00e9c\u00e9dent, je pr\u00e9sentait comment, dans le logiciel Inkscape, d\u00e9finir une d\u00e9coupe avec contour. La technique pr\u00e9sent\u00e9e implique l'utilisation de 2 clones, mais apr\u00e8s un essai r\u00e9cent, je me suis aper\u00e7u que cela marchait \u00e9galement avec un seul et unique clone La nouvelle technique On trace la forme\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1058,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/01\/06\/retour-compteur-caracteres\/","url_meta":{"origin":1368,"position":3},"title":"Le retour du compteur de caract\u00e8res","author":"geekc","date":"06\/01\/2023","format":false,"excerpt":"Apr\u00e8s \u00eatre revenu derni\u00e8rement sur ma s\u00e9rie de tutos d\u2019introduction aux canvas, j\u2019ai d\u00e9cid\u00e9 de m\u2019attaquer \u00e0 l\u2019un de mes anciens articles me valant le plus d\u2019affichage sur le moteur de recherche d\u2019Alphabet\u00a0: le compteur de caract\u00e8res. Comme pour mes derniers articles traitant de JavaScript, une fois de plus je\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":991,"url":"https:\/\/geekcommunicant.com\/blog\/2022\/12\/09\/gloubi-tuto-texte-degrade\/","url_meta":{"origin":1368,"position":4},"title":"Gloubi tuto &#8211; un texte en d\u00e9grad\u00e9","author":"geekc","date":"09\/12\/2022","format":false,"excerpt":"Pour ce deuxi\u00e8me gloubi tuto, on s\u2019attaque \u00e0 un script qui a eu son petit succ\u00e8s sur Skyblog\u00a0: le texte \u00ab\u00a0arc-en-ciel\u00a0\u00bb (en d\u00e9grad\u00e9s). Script original et explication Pour voir le script original, qui fonctionne encore dans les navigateurs modernes, rendez-vous ici sur le site de notre N\u00e9m\u00e9sis dans la deuxi\u00e8me\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":808,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/06\/11\/carte-interactive-metro-paris-leaflet\/","url_meta":{"origin":1368,"position":5},"title":"Carte interactive du m\u00e9tro de Paris avec Leaflet","author":"geekc","date":"11\/06\/2019","format":false,"excerpt":"Si on vous parle de solution pour int\u00e9grer une carte sur votre site, la premi\u00e8re qui vous vient \u00e0 l\u2019esprit est surement Google Maps. Mais il existe plusieurs solutions open-source et gratuites. Je vous ai d\u00e9j\u00e0 parl\u00e9 d\u2019OpenLayers, avec laquelle j\u2019ai d\u00e9j\u00e0 refait une carte r\u00e9alis\u00e9e pr\u00e9c\u00e9demment avec jQuery. Mais\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=1368"}],"version-history":[{"count":3,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1368\/revisions"}],"predecessor-version":[{"id":1372,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1368\/revisions\/1372"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=1368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=1368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=1368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}