git reset コマンドで add や commit をリセットする方法

git reset コマンドで add や commit をリセットする方法

Gitコマンドの一つ、git reset はインデックスの状態をリセットしたり、現在のブランチのHEADを指定した状態にリセットするコマンドです。間違った内容を add してステージングエリアに上げてしまった場合や、commit してしまった場合に取り消すことができます。

目次

git reset とは

git reset には大きく分けて2つの機能があります。

  • インデックスの状態をリセットする
  • 現在のHEADを指定した状態に変更する

どちらの動作をするかはコマンド実行時に指定する引数によって異なります。

git reset で git add した内容をリセット

実際に git reset コマンドで git add した内容をリセットしてみましょう。

testリポジトリに用意した sample.html というファイルに変更を加え、git add コマンドでステージングエリアに追加しました。

ここでファイルの変更内容の間違いに気付き、git add をリセットしたいとします。

git reset sample.html

これで sample.html の変更内容のステージングエリアへの追加は取り消されました。

インデックスの状態をリセットするには下記のように記述します。

// 特定のファイルだけリセット
git reset /path/to/file.php

// ディレクトリ配下をすべてリセット
git reset /directory/

git reset で git commit した内容をリセット

次はコミットを取り消したい場合です。git commit した変更履歴は HEAD という場所に記録されています。

git reset --soft HEAD^

これで直前のコミットを取り消すことができました。この場合はコミットのみを取り消したのでファイルの変更履歴はステージングエリアに残っています。

git reset コマンドでHEADの状態をリセットするには3つのモードと、取り消したいコミット(またはコミットの識別子SHA-1)を引数として設定します。

// HEADだけをリセット。(コミットのみを取り消す)
git reset --soft

// HEADとインデックスをリセット。(コミットとアドを取り消す)
git reset --mixed

// HEAD、インデックス、ワーキングツリーの全てをリセット。(コミット、アドに加えファイルの変更もリセット)
git reset --hard

git reset の使用例

git reset コマンドにがよく使われる例として下記のパターンが挙げられます。

直前のコミットを修正する

// HEADの状態だけをリセットする
git reset --soft HEAD^ 

// 追加修正をaddしてコミットし直す。
git add additional-update.php
git commit

ブランチを強制的に同期する

// ローカルの origin/master ブランチをリモートの master ブランチと強制的に同期する。
git fetch origin master
git reset --hard origin/master
このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。