git restoreコマンドとは?
restoreコマンドとは、前回のコミット時点まで特定のファイルを復元するコマンドです。
今の状態から直前のコミットの状態までプロジェクトの状態をリセットしたいという時に便利なコマンドです。
特定のファイルに状態を戻す
特定のファイルの変更を元に戻したい、リセットしたいなと思った時に使用することができます。
ステージングしていない特定のファイルを元に戻すことができます。
On branch <branch>
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: <file_name>
この状態で下のコマンドを使用します。
git restore <file_name>
そうすると下のようにファイルの変更がない前回のコミット状態に戻ります。
On branch <branch>
nothing to commit, working tree clean
全てのファイルの状態を戻す
ファイルを.
と指定することで全てのファイルの状態を前回のコミット状態に復元することができます。
git restore .
しかし、restoreはステージングしている内容をリセットするのはできません。
ステージングしているのをステージング前に引き下げるのは、--stagedを使用します。
下のようにステージングしているファイルがあったとします。
On branch <branch>
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: <file_name>
これを引き下げるために下のコマンドを使用します。
git restore --staged <file_name>
そうするとステージング前の状態になります。
On branch <branch>
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: <file_name>
resetコマンドとは?
resetは特定のコミット履歴までプロジェクト全体の状態を戻すことができます。
resetには3つのオプションがあります。
オプション | 効果 |
---|---|
--soft | HEADの位置を戻す |
--mixed | HEADの位置・インデックスも戻す |
--hard | HEADの位置・インデックス・ワーキングツリーを戻す |
--soft
--softを使うことで特定のコミットIDまでコミットの状態を戻すことができます。
git reset --sof <commit_id>
例えばHEAD^を指定するとひとつ前のHEADの状態に戻ります。
git reset --soft HEAD^
こうすると直前のコミットが取り消され、その際にコミットしたファイルがステージングされた状態になります。
--mixed
--mixedを使うことでインデックスとHEADを特定のコミットIDまで戻すことができます。
git reset --mixed <commit_id>
HEADを指定すると、ファイルをステージングしていない状態に戻ります。
git reset --mixed HEAD
HEAD^を指定するとひとつ前のコミット状態まで戻しつつ、ステージングされていない状態に戻ります。(変更したファイルは残ります)
git reset --mixed HEAD^
--hard
--hardを使うことで、ワーキングツリーとインデックスとHEADが特定のコミットIDまで戻すことができます。
git reset --hard <commit_id>
HEADを指定すると変更したファイルが無くなってしまいます。
git reset --hard HEAD
HEAD^を指定すると直前のコミットを消してしまい、直前のコミットで作業した内容は全て消えてしまいます。
git reset --hard HEAD^
checkoutとは?
checkoutはブランチの変更やファイルの復元で使われてきたコマンドです。
- ブランチの切り替え
git checkout <branch_name>
- ファイルの復元
git checkout -- <file_name>
このコマンドは複数の機能を備えてるが故に初学者にとっては扱いづらく、加えて熟練者にとってもミスを引き起こしやすいものでした。
これらを分離してswitch
とrestore
コマンドが生まれました
まとめ
上記で説明して分かる通り、resetとcheckoutはかなり複雑に機能が混在しており、ファイルの復元をしようとするとかなりミスを引き起こす可能性があることがわかると思います。
なのでできるだけresotreを使うことで、安全に最新のコミットした時の状態までファイルを復元させましょう。
コマンド | 機能 |
---|---|
resotre | 最新のコミットまでファイルを復元する |
reset | 特定のコミット位置までプロジェクトを戻す |
checkout | ブランチの変更やファイルの復元 |
switch | ブランチの変更 |
git関連の記事