はんなりと、ゆるやかに

アジャイル、スクラムが好きが日々から学んだことをアウトプット

git restore で変更の取り消し

git checkoutは「指定ブランチに切り替え」と「指定したコミットのファイルをワーキングツリーに復元」ができる機能を持っています。「指定ブランチに切り替え」は git switchでも行えるようになりました(git switch でブランチの切り替え - はんなりと、ゆるやかに )。
今回は「指定したコミットのファイルをワーキングツリーに復元」の機能の代わりに使えるgit restoreについてです。

git restore

2.23.0 のバージョンから"git restore"が追加されました。

Git - git-restore Documentation

restore は「指定したコミットのファイルをワーキングツリーに復元」に使えるコマンドです。コミット指定を HEAD にすれば変更を元に戻すことができます*1

以下のコマンドでカレントディレクトリ以下の変更点を元に戻せます。

git restore .

以下のコマンドでカレントディレクトリ以下を指定コミット番号の状態にします。

git restore -s (コミット番号) .

まとめ

公式ドキュメントに例が掲載されていて、変化が分かりやすいと思いました。

$ git checkout master
$ git checkout master~2 Makefile
$ rm -f hello.c
$ git checkout hello.c

$ git switch master
$ git restore --source master~2 Makefile
$ rm -f hello.c
$ git restore hello.c

どちらの例も同じことを行っていますが、前者はすべてのコマンドがcheckoutなのに対して、後者は操作に応じてコマンドが分かれています。操作に応じてコマンドが変わる後者の方が理解しやすいですね。

(補足)
例では以下の事を行っています。

  1. master ブランチに切り替え
  2. 他のコミットのファイルを反映
  3. hello.cファイルを削除
  4. hello.cファイルの変更を戻す

*1:指定しなければデフォルトでHEADが指定されます