Git

The `git reflog` command is a tool that displays the history of all operations performed in a Git repository and provides clues for returning to a specific commit or state.

git reflog

 git reflogコマンドは、Gitのリポジトリ内で行われたすべての操作を追跡するための非常に強力なツールです。これにより、過去のすべての操作履歴を確認することができ、特定のコミットやブランチに戻るのに役立ちます。

 git reflogは、各ブランチやリポジトリの HEADの参照履歴を表示します。Gitの通常のログとは異なり、reflogにはローカルで行われたすべての操作(チェックアウト、リセット、マージなど)が記録されます。これにより、誤ってブランチやコミットを移動してしまった場合でも、元の状態に戻るための手がかりを得ることができます。

主な機能

コミットの追跡
  • git reflogは、各ブランチの HEADが移動したすべての履歴を表示します。
  • コミットID、操作の種類、操作を行った時刻が表示されます。
操作履歴の確認
  • git reflogを使用すると、過去に行ったすべての操作(チェックアウト、リセット、マージ、リベースなど)を確認できます。
復元
  • 誤って削除したブランチやコミットを復元するために役立ちます。
  • reflogエントリを使用して、特定のコミットに戻ることができます。

使用方法

基本的な使い方

Git Bash

git reflog
これにより、現在のリポジトリの HEADの操作履歴が表示されます。
特定のブランチの reflogを表示

Git Bash

git reflog show ブランチ名
指定したブランチの操作履歴を表示します。
特定のコミットに戻る
reflogを使って過去のコミットに戻るには、表示されたコミットIDを使って git resetまたは git checkoutコマンドを使用します。

Git Bash

git reset --hard HEAD@{3}
ここで HEAD@{3}は、reflogで表示された特定のコミットの位置を指します。

使用例

 例えば、以下のように reflogを表示するとします。

Git Bash

$ git reflog
c4f3b9a (HEAD -> main) HEAD@{0}: commit: Add new feature
a3d9f9d HEAD@{1}: commit: Fix bug
b2c8f7e HEAD@{2}: checkout: moving from feature-branch to main
d3f1e8c (feature-branch) HEAD@{3}: commit: Start feature
...

 この履歴から、過去に行った操作を確認し、必要に応じて特定の状態に戻ることができます。例えば、d3f1e8cのコミットに戻りたい場合は、次のコマンドを使用します。

Git Bash

git reset --hard d3f1e8c