Git reset入門
履歴を操作して特定の状態に戻す
git resetの3つのモード(soft/mixed/hard)の違いと使い方を解説します。
こんな人向けの記事です
- コミットを取り消したい人
- resetの3つのモードの違いを理解したい人
- 安全なリセット方法を知りたい人
Step 1resetの3つのモード
| モード | HEAD | ステージング | 作業ツリー |
|---|---|---|---|
| --soft | 戻る | 残る | 残る |
| --mixed(デフォルト) | 戻る | 戻る | 残る |
| --hard | 戻る | 戻る | 戻る |
Step 2--soft: コミットだけ取り消す
コミットは取り消しますが、変更はステージングされた状態で残ります。
ターミナル
# 直前のコミットを取り消し(変更はステージングに残る)
git reset --soft HEAD~1
# 2つ前のコミットまで戻す
git reset --soft HEAD~2使用場面: コミットメッセージを変えたい場合や、複数のコミットをまとめ直したい場合に便利です。
Step 3--mixed: ステージングも取り消す
コミットとステージングを取り消し、変更は作業ツリーに残ります。
ターミナル
# 直前のコミットとステージングを取り消し
git reset HEAD~1
# 特定のコミットまで戻す
git reset コミットハッシュStep 4--hard: 全て取り消す
コミット、ステージング、作業ツリーの変更をすべて取り消します。
ターミナル
# 直前のコミットを完全に取り消し
git reset --hard HEAD~1
# 特定のコミットまで完全に戻す
git reset --hard コミットハッシュ注意: --hardで取り消した変更は通常の方法では復元できません。慎重に使用してください。
Step 5resetの取り消し(reflog)
誤ってresetした場合、reflogから復元できます。
ターミナル
# reflogで操作履歴を確認
git reflog
# resetを取り消して元に戻す
git reset --hard HEAD@{1}ポイント: reflogはローカルにのみ保存され、デフォルトで90日間保持されます。