Git

git stashやgit resetで犠牲になった奴らを救い出す。

概要

CommandLine
git stash clear
git reset --hard

これらのコマンドで必要なことまで削除してしまった経験がある。
今回社内勉強会にて先輩の発表を聞き、上記で削除してしまった奴らを救い出すためのコマンドがあることを知った。どうやら方法はいくつかあるらしい。それをまとめておく。

銀の弾丸

銀の弾丸になりうるコマンドとして以下の二つを発見した。

  • git branch
  • git fsck

git branchだと?

blobもcommitも表示

辿れないコミットたちを一覧で見る
$ git fsck --lost-found

Checking object directories: 100% (256/256), done.
Checking objects: 100% (378440/378440), done.
Checking connectivity: 364378, done.
dangling blob e50250e094d8b82bd6b03e54ac183edb3f1917be
dangling blob 170400a50ec51a2f0d41e6277c512a6ed059590e
dangling blob 230660ef7e0ecf019672f5e8ae501f63f18fcedf
dangling blob 7008c0d7ac965d41288a9c816149c594ec7ffed7
dangling blob 7a0ae01b9f072170af82c8939232f68277d287f2
dangling blob 790c00fe95fc08f630cb30221d3a62d878208b8b
dangling blob 0810505d9cdc261581b42ca21156f1094a22752e
dangling commit 4015100956830157a2fa44a447b35c76d7bb0b1a
dangling blob 0d169065dfa0bbc8bdc36150b22aa885c707ea12
dangling blob 4316900fafaf2c3e80e80350ea8c0f159906a6ac
dangling blob 9c1c00196cc604321d8c8fd2b02ae1f498d31030
dangling blob bf20f0c6ec773ccdacbfbcb3b606086e894df083
dangling blob 0323907eb78ae784b31d164ea6c6bd663fa7639a
dangling blob 632410a1cecd4620c916de719f9dd5ae18d36a50
dangling blob b724d07410a68848820c7df109d5ed450877e4e1
dangling blob 932f10c9091013b90db985f4d87840471033e66d
dangling blob 533600e3476bdf2596a5f5b26465c674241bc483
dangling blob ff3fc0f8c964d2bb92196d0a029d65970c1f1494
dangling blob f341f0f18a0efae13167951d5bdb1652c39a78d9
dangling blob 2644a0c68300cb2da2d796836fcd48f233391869
dangling commit cf44102dcc8ae1f455e0241e7f27e88c7ef1c291
(中略)

このコマンドは今までのログをかき集めてくる関係上、今までのコミットの量などが多いほど時間がかかるため、その場合は大人しく待つ。

commitのみ表示

commitのみを表示
$ git fsck --lost-found | grep commit | awk '{print $3}'