2019年8月にリリースされた Git 2.23 から,Experimental(実験的機能)として新コマンド git switch
と git restore
が使える.今までずっと使ってきた git checkout
は機能が多すぎたため,機能を分割し git checkout
の代替としてリリースされた.個人的にリリースされてから,できる限り git switch
と git restore
を使うようにしてるけど,まだ無意識に git checkout
を使ってしまうこともある.最近 git switch
を教える機会があったため,ブログにまとめておく.
なお,以下の検証は Git 2.26.0 を使った.
$ git --version git version 2.26.0
1. git switch
を使う
git switch
を使って「ブランチ操作」を行なう.ドキュメントを網羅的に紹介するのではなく,よく使う操作を中心に git checkout
などと比較しながら紹介する.詳細はドキュメントを参照してもらればと.
ブランチを作る
git switch -c
でブランチを作れる.今までは git checkout -b
を使っていた.
$ git checkout -b my-git-checkout $ git switch -c my-git-switch
ブランチを切り替える
git switch
という名前の通り,ブランチ名を指定すると切り替えられる.
$ git checkout master $ git switch master
1個前のブランチに切り替える
Linux の cd -
と同じく,-
を使って git switch -
とすると,1個前のブランチに切り替えられる.
$ git checkout - $ git switch -
リモートブランチを取得する
「ブランチを作る」と同じく git switch -c
を使って,origin/xxx
など,リモートブランチを指定する.
$ git fetch $ git checkout -b my-github-branch origin/my-github-branch $ git fetch $ git switch -c my-github-branch origin/my-github-branch
"強制的に" ブランチを作る
個人的にあまり使う機会はなさそうだし,誤って使うと危険な気もするけど,git switch
で -C
オプション(大文字)もしくは --force-create
オプションを使うと,もし同じ名前のブランチが存在していても強制的に作り直す.-c
と -C
は区別しにくそう...!
$ git switch -C my-git-switch
2. git restore
を使う
git restore
を使って「変更を戻す操作」を行なう.ドキュメントを網羅的に紹介するのではなく,よく使う操作を中心に git checkout
などと比較しながら紹介する.詳細はドキュメントを参照してもらればと.
Unstaging な変更を戻す(git add
をする前)
今まで git checkout
を使って変更を戻していたけど,git restore
で戻せる.とは言え,個人的に1番無意識に使ってしまうのが git checkout .
で,今もまだ git restore .
には慣れていない.
$ git checkout README.md $ git checkout . $ git restore README.md $ git restore .
実際に git status
を使うと,git restore
を使うリファレンスも出る.
$ git status (中略) 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: README.md
Staging な変更を戻す(git add
をした後)
git add
で Staging にした変更を戻す場合,今までは git reset
を使っていたけど,git restore --staged
を使う.
$ git reset README.md
$ git restore --staged README.md
実際に git add
をした後に git status
を使うと,git restore --staged
を使うリファレンスも出る.
$ git status (中略) Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: README.md
指定した Commit に戻す
指定した Commit に戻す場合は git restore -s
を使う.ただし,git checkout
は Staging な状態に戻り,git restore -s
は Unstaging な状態に戻るため,単純比較ではなく,注意すること.
$ git checkout ${HASH} . $ git checkout master~2 . $ git restore -s ${HASH} . $ git restore -s master~2 .
まとめ
Git 2.23 から,Experimental(実験的機能)として使えるようになった新コマンド git switch
と git restore
の中でよく使う操作を中心に紹介した.プログラミング講師の仕事をしていたときに git checkout
の説明に苦労した経験もあり,今後は Git 初学者は git switch
と git restore
から学べば良さそう.