2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gitでピンチ?落ち着いて、「git reflog」を使用してください

Posted at

Gitの操作ミスなら、復旧できる... git reflogで...

git reflog vs git log

git loggit status等は知っているけどgit reflogは何ですか?

logはブランチのコミットの履歴

git logは、現在のブランチに対するrefs(ヘッド、タグ、リモート)からアクセス可能なコミットの洗練された履歴を表示します。

別のブランチをチェックアウトすると、別のコミット履歴が表示されます。

※ すべてのブランチのコミット履歴を確認したい場合は、git log --allと入力します。

reflogはロカルリポシトリの履歴

git reflogは、ロカルリポジトリで指示された、または指示されているすべてのコミットのロカル記録です。

コミット又はチェックアウトが行われるたびにエントリがあります。

そのため、「破壊的な」操作(ブランチの削除など)を実行するときに、そのブランチによって指示されたSHA1のハッシュを取得するために、git reflog(デフォルトで90日後にプルーニングされるローカル記録)が使用されます。

セーフティネット

reflogは、修正した内容とリセットしたコミットを追跡するため、くれるコミットIDでコミットを戻って見つけることができます。リポジトリから古いコミットが削除されていなかったら、logに表示されなくなったアイテムを復活させることができます。不注意で失ったと思った何かを取り戻す必要があるとき、git reflogは時々命の恩人になります。

取り戻しの巻

昨日はコミットした後でリモートのプッシュの失敗に気付かなくて別なブランチに代わってハードリセットした後で仕事の一日分を失ったと思たら先輩から「Gitの操作ミスなら、復旧できるかもしれないですよ。 git reflog
で、コミットのハッシュを見つければcheckoutなどできるので...」と言われました。

下記のステップで失ったコードを取り戻しました:

1. reflogを表示
PowerShell
PS C:\Users\owner\My-project-root> git reflog
2. コミットに戻る
PowerShell
PS C:\Users\owner\My-project-root> git checkout x9xx99x
3. 新しいブランチ作成
PowerShell
PS C:\Users\owner\My-project-root> git switch -c feat-dev
4. リモートリポジトリにプッシュ
PowerShell
PS C:\Users\owner\My-project-root> git push -f origin feat-dev
5. 助かりました!

プルーニングの有効期限

プルーニングの有効期限は、構成設定gc.reflogExpireから取得され、デフォルトで90日になります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?