git resetでコミット自体をなかったことにして、過去のコミットの状態へ戻すことができます。その方法には主にMixed・Soft・Hardの3つのパターンが存在します。
まずは視覚的に分かりやすいSourcetreeで説明してみます。
下記画像は、1つのファイルを生成し、単純にテキストでabcdと一文字づつ追加していくごとにコミットしていったSourcetreeの様子です。
この状態から「bを追加」の状態のコミットに戻してみます。「bを追加」上で右クリックし、「このコミットまでmasterを元に戻す」を選択します。
すると「Soft」「Mixed」「Hard」の3つのモードを選択することができます。デフォルトはMixedです。
それぞれのモードを選択した時のコミットの戻り方は以下のようになります。
1. Mixedを選択した場合
「bを追加」までコミットを戻すと以下のような履歴になります。
Mixedでコミットを戻した場合、編集しているファイルの文字列は「abcd」のままです。また作業ツリーに位置しているのがわかります。つまり「作業コピーの変更内容を保持」して、インデックスをリセットしている状態です。
2. Softを選択した場合
Softでコミットを戻した場合、編集しているファイルは「abcd」のままです(作業コピーの変更内容を保持)。ファイルはステージにいるのが分かります。
3. Hardを選択した場合
Hardを選択した場合は、作業していた履歴を完全に戻します。つまり「abcd」という文字列が「ab」に戻り、履歴も下記のように表示されます。
Gitコマンドでおこなう
上記の説明を、Sourcetreeを利用せずにコマンドでおこなってみます。
git logで履歴を見ます。「bを追加」までコミットを戻します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
commit a9cd689a10ca03a4dea81a7d5c3db2b8768f4262 (HEAD -> master) Author: sikounoha <hoge@hoge.local> Date: Sat Dec 15 14:00:52 2018 +0900 dを追加 commit 1cc77e22afebb6a69e7a7f5551ab22015d8c65d4 Author: sikounoha <hoge@hoge.local> Date: Sat Dec 15 14:00:21 2018 +0900 cを追加 commit d214640da95bfd852926b50448fba98c02b36059 Author: sikounoha <hoge@hoge.local> Date: Sat Dec 15 12:15:23 2018 +0900 bを追加 commit ac9d21b23336ccc60af71ecb9caf1bde6f0988a0 Author: sikounoha <hoge@hoge.local> Date: Sat Dec 15 12:14:45 2018 +0900 aを追加 commit d87af5ae4d37e43342550be5719679c0642aca90 Author: sikounoha <hoge@hoge.local> Date: Thu Dec 13 09:11:57 2018 +0900 テキストファイルを追加 |
それぞれの「–mixed」「–soft」「–hard」のオプションを追加してresetしていきます。
Mixed
1 |
git reset --mixed d214640da95bfd852926b50448fba98c02b36059 |
下記のようにオプションを付けないで実行した時はデフォルトでこのMixedになります。
1 |
git reset d214640da95bfd852926b50448fba98c02b36059 |
Soft
1 |
git reset --soft d214640da95bfd852926b50448fba98c02b36059 |
Hard
1 |
git reset --hard d214640da95bfd852926b50448fba98c02b36059 |
関連ページ