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