【Git】コミットを取り消す方法!resetコマンドとオプション
この記事からわかること
- Gitのコミットを取り消す方法
- resetコマンドの使い方とオプション
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Gitでコミットを取り消す方法
Gitで一度実行したコミットを取り消すにはgit reset
コマンドの以下のオプションを実行します。
$ git reset --soft HEAD^
上記のコマンドを実行することで1つ前のコミットが削除され、ファイルがインデックス状態に戻ります。
しかし過去のコミットを指定するとそのコミット以降の変更も取り消されてしまうので注意が必要です。特定のコミットのみを打ち消したい場合はrevert
を使用します。
resetコマンドの役割
reset
コマンドはコミットの履歴を変更(HEADの位置を移動)するためのコマンドです。コミット自体の取り消しやそれに伴うインデックス、ワーキングツリーの変更を操作する役割があります。
$ git reset [オプション] [コミット]
git reset
コマンドには複数のオプション(サブコマンド)が用意されています。
指定するコミットはハッシュ値です。先頭のコミットに対してHEAD
で指定できます。
ステージングしたことを取り消す
ワーキングツリーのファイルを変更しステージングした後にそのステージングを取り消すことも可能です。
$ git reset
上記のようにgit reset
とするだけで現在のHEADの状態にステージングしてあるファイルを戻すことができます。
任意のファイルのみステージングを取り消す
ステージングを取り消す際には任意のファイルを指定して実行することも可能です。その際は -- [ファイル名]
をつけます。
$ git reset -- [ファイル名]
--softオプション
--soft
オプションは指定したコミット以降の変更がインデックス(ステージングエリア)に保持されます。コミットを取り消すだけで、ワーキングツリーは変わりません。
$ git reset --soft HEAD^
対象 | 変更の可否 |
---|---|
コミット | 指定したコミット以降を削除 |
インデックス | コミット前に戻る(ステージングだけした状態) |
ワーキングツリー | 変わらない |
--mixedオプション
--mixed
オプションは指定したコミット以降の変更がワーキングツリーに保持されます。インデックスはリセットされ、変更内容はステージングされていない状態となります。
$ git reset --mixed HEAD^
対象 | 変更の可否 |
---|---|
コミット | 指定したコミット以降を削除 |
インデックス | 解除(ステージング前に戻る) |
ワーキングツリー | 変わらない |
--hardオプション
--hard
オプションは指定したコミット、インデックス、ワーキングツリーの変更が完全に取り消されます。
$ git reset --hard HEAD^
対象 | 変更の可否 |
---|---|
コミット | 指定したコミット以降を削除 |
インデックス | 解除(ステージング前に戻る) |
ワーキングツリー | コミット前に戻る |
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。