Git reset --hard でローカルファイルを過去に戻す方法
目次
git reset hardとは
「git reset hard」とは、Gitのコマンドの一つで、リポジトリの状態を直前のコミットまで強制的に戻す操作です。 具体的には、カレントブランチのHEADを指定したコミットに移動し、そのコミット以降の変更を完全に削除します。
例えば、間違ってコミットした内容を取り消したい場合や、直前のコミットまでの状態に戻してから新しい変更を加えたい場合には有用です。
反面、このコマンドは非常に強力で、変更履歴が完全に削除されるため、元に戻せない変更も含まれる点に注意しましょう。
リモートリポジトリに対して直接変更を加えるため、他の開発者との協力が必要な場合は特に慎重に扱う必要があります。
コマンドの動作
git reset --hard を実行すると、以下の3つの要素が巻き戻されます。
- 作業ツリー: ローカル環境で編集中のファイルの状態
- インデックス: 次回のコミットに含める予定のファイルの状態
- HEAD: 現在作業中のブランチの先頭ポインタ
これらの要素は、指定されたコミット時点の状態に完全に 上書きされます。
つまり、ローカル環境で行った変更はすべて失われます。
使用例
作業中の変更を破棄してコミット前の状態に戻す
作業中に誤った変更を行ってしまった場合、git reset --hard を使ってコミット前の状態に戻すことができます。
| # 作業中のファイルを編集 $ git add . # コミット前に誤りに気付く $ git reset --hard HEAD |
このコマンドを実行すると、作業ツリーとインデックスは、直前のコミット時点の状態に巻き戻されます。
特定のコミットまで巻き戻す
コミット履歴を遡って、特定のコミット時点まで巻き戻したい場合もあります。その場合は、git reset --hard コマンドにコミットハッシュを指定します。
| # コミット履歴を確認 $ git log # 特定のコミットまで巻き戻す $ git reset --hard <コミットハッシュ> |
このコマンドを実行すると、作業ツリー、インデックス、HEAD は、指定されたコミット時点の状態に巻き戻されます。
注意点
git reset --hard は強力なコマンドであるため、以下の点に注意が必要です。
- ローカル環境で行った変更はすべて失われます。実行前に必ずコミットしておくことをおすすめします。
- リモートブランチにプッシュした変更を巻き戻したい場合は、git reset --hard を実行する前にリモートブランチも更新する必要があります。
- 誤ったコミットハッシュを指定すると、意図しないファイルが失われる可能性があります。
まとめ
この記事では、git reset --hardの概要や基本操作、使用例、注意点について詳しく説明しました。
このコマンドは、作業中の変更を破棄したり、過去のコミット時点まで巻き戻したりする際に役立ちますが、指定したコミットやブランチに戻り、変更履歴も完全に削除されます。
強力なコマンドであるため、実行には注意が必要です。
初心者の方は、まず簡単な例で試してから、実際の作業に利用することをおすすめします。