git resetとは?基本知識
git resetとは、コミットやファイルの変更を元に戻したり、取り消したりするためのコマンドです。
具体的には、以下のようなことができます。
- 直前のコミットを取り消す
- コミットを取り消しつつ変更を残す
- 特定のコミットまで戻る
git resetを使うことで、間違えてしまったコミットや不要な変更を取り消し、作業を効率化できます。gitを利用する上では必ず覚えておきたい基本コマンドの一つです。
git resetの基本コマンド
git resetは、以下の形式で使用します。
git reset [オプション] [コミットのハッシュ値]
例:直前のコミットを取り消す場合
git reset HEAD^
HEAD^は「現在のコミットの一つ前」を示しており、このコマンドで直前のコミットを取り消して元の状態に戻せます。
git resetの3つのモード
git resetには主に以下の3つのモードがあります。
--soft
:コミットだけを取り消し、変更をステージングエリアに残す--mixed(デフォルト)
:コミットを取り消し、変更を作業ディレクトリに残す(ステージング解除)--hard
:コミットも変更も完全に取り消し、元の状態に戻す(変更が消えるため注意が必要)
実際の例:
# コミットだけを取り消し(変更はステージングに残る)
git reset --soft HEAD^
# コミットを取り消し、変更をステージングから外す
git reset HEAD^
# コミットも変更内容も完全に削除して戻す
git reset --hard HEAD^
このように、用途に応じてモードを使い分けることがポイントです。
git reset手順と使い方
git resetの手順を整理すると以下のようになります。
- 取り消したいコミットを特定する
- コミットのハッシュ値を確認する(
git log
で確認可能) - git resetコマンドで指定のコミットまで戻す
具体例:
# コミット履歴を確認(ハッシュ値を調べる)
git log --oneline
# 特定のコミットまで戻す
git reset コミットのハッシュ値
実行後、現在位置が指定コミットまで戻ります。
取り消したいコミットを選ぶ際は、事前に慎重に確認しましょう。
git resetで取り消す方法
間違ってコミットした際、git resetを使って取り消す方法は以下の通りです。
直前のコミットを取り消したい場合(変更は残す):
git reset HEAD^
コミットも変更も完全に取り消したい場合:
git reset --hard HEAD^
特定のファイルだけステージングを解除したい場合:
git reset HEAD ファイル名
用途に応じてこれらを使い分けましょう。
git resetとrevertの違い
git resetとgit revertはどちらもコミットを取り消すコマンドですが、以下のような違いがあります。
- git reset:指定コミット以降を完全に削除(履歴が消える)
- git revert:新たなコミットを作成して変更を「打ち消す」(履歴が残る)
例えば、共有リポジトリで使う場合、履歴を削除してしまうresetよりもrevertの方が安全です。
例:revertの使い方
git revert コミットのハッシュ値
チーム作業では基本的にrevertを使用し、resetは自分のローカルな環境で使うことが推奨されています。
git reset使用時の注意点
git resetを使う際には、以下のような注意点があります。
--hard
オプションは変更を完全に削除するため、慎重に使用する- 一度resetすると取り消したコミットが復元できないケースもある
- 共有リポジトリにpush済みの場合、resetではなくrevertを推奨
特にgit reset --hard
は元に戻せないため、必ずコミット内容を事前に確認して使用しましょう。
git reset便利コマンド集
よく使われる便利なgit resetコマンドをまとめました。
- 直前のコミットだけを取り消す(変更は残す)
git reset HEAD^
- 直前のコミットも変更も完全に破棄する
git reset --hard HEAD^
- 特定ファイルのステージングのみ解除
git reset HEAD ファイル名
- 指定したコミットまで一気に戻す
git reset --hard コミットのハッシュ値
これらを覚えておくと、作業を効率的に進められます。
git resetコマンド早見表
最後に、git resetのコマンド早見表を一覧でまとめました。
操作内容 | コマンド |
---|---|
直前のコミットだけ取り消す | git reset HEAD^ |
コミットを取り消し変更を残す | git reset --soft HEAD^ |
コミットとステージングを解除 | git reset HEAD^ |
コミット・変更を完全に削除 | git reset --hard HEAD^ |
特定ファイルをステージ解除 | git reset HEAD ファイル名 |
指定コミットまで完全に戻す | git reset --hard コミットのハッシュ値 |
git resetを使いこなして安全で効率的な開発作業を行いましょう。