Git Reflog
最終更新
git reflog は HEAD が指したすべての場所を記録します - すべてのコミット、checkout、reset、rebase です。Git はブランチから外れた後もこれらのコミットをしばらく保持するため、reflog はあなたのセーフティネットになります。reset --hard、失敗した rebase、削除したブランチによって失われたように見える作業を見つけて復元できます。
これらをターミナルプレイグラウンドで試してみましょう - ブラウザ上の本物のシェルで、インストールは不要です。
構文
| Command | What it does |
|---|---|
git reflog | HEAD の最近の位置をハッシュ付きで表示する |
git reflog show <branch> | ブランチの reflog を表示する |
git reset --hard HEAD@{1} | HEAD を以前の位置に戻す |
git branch recovered <hash> | 失われたコミット上にブランチを再作成する |
ミスからの復元
reset 前のコミットを見つけて、誤った reset を取り消します。
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | reset 前のコミットを見つける |
| 2 | git reset --hard HEAD@{1} | ブランチをその状態に復元する |
git reflog のよくある質問
git reflog とは何ですか?
ローカルリポジトリで
HEAD(および各ブランチの先端)が指したすべての場所のログです - コミット、checkout、reset、merge、rebase の後などです。コミットの祖先をたどる git log とは異なり、reflog はあなたの操作を時系列で記録したものであり、それが復元に役立つ理由です。git reset --hard の後にコミットを復元するには?
git reflog を実行して reset 前にいたコミットのエントリ(HEAD@{1} のようなもの)を見つけ、次に git reset --hard <that-hash>(または HEAD@{1})でそこに戻ります。コミットは実際には削除されていません - それを指すブランチがなくなっただけで、reflog はまだそのハッシュを知っています。削除したブランチを復元するには?
git reflog でそのブランチの最後のコミットを見つけ、そこにブランチを再作成します: git branch <name> <hash>。削除が最近であれば(Git の reflog 有効期限内、通常は数週間)、コミットはこの方法でまだ到達可能です。git reflog はクローン間で機能しますか?
いいえ - reflog はあなたのリポジトリにローカルであり、push もクローンもされません。あなたのマシン上の操作だけを記録します。だからこそローカルのミスを救えますが、別のクローンにしか存在しなかったものは復元できません。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開いて、ブラウザ上の本物のシェルで
git reflog を実行できます - インストールは不要です。Coddy の無料のインタラクティブな Git コースでも、変更の取り消しと復元を段階的に扱っています。