派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

第8話 switchとrestoreを使ってみよう 【連載】マンガでわかるGit ~コマンド編~

f:id:itstaffing:20200130131104j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

前回の 第7話 では、間違えてリセットしてしまっても元に戻せる「リフログ」を学びました。

・HEAD の移動履歴一覧を表示

$ git reflog

・特定の時点までファイルを巻き戻す(nには戻りたい地点の数字を入力)

$ git reset --hard HEAD@{n}

今回の第8話では、2019年夏にリリースされた新コマンド「switch」 と「restore」 をご紹介します。このコマンドは、checkoutの機能である 「ブランチの切り替え」と「ファイルの変更」を2つに分けたものです。このマンガを通して、わかばちゃんと一緒に知識を身につけていきましょう!

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

Gitの新コマンド switch と restore って?

f:id:itstaffing:20200130131106j:plain
f:id:itstaffing:20200130131109j:plain

2019年8月16日に Git 2.23 がリリースされ、2つの新コマンドが実験的に追加されました。それが switch(スイッチ) と restore(リストア)です。

新コマンドが追加された理由

checkout コマンドは便利である故に「できることが多すぎる」といった点もありました。たとえば、ブランチの切り替え、コミット履歴からのファイル復元、編集内容の取り消しなどです。そこで、checkoutの機能をブランチの切り替え「switch」 と ファイルの変更「restore」 の2つに分け、更に使いやすくしたというわけです。

f:id:itstaffing:20190617145538j:plain
switch と restore 、早く使ってみたい!

まずはGitのバージョンを最新版にする

新コマンドを使う前に、まずは自分のパソコンに入っているGitのバージョンを確認してみましょう。次のコマンドを打ち込んで、Gitのバージョンを調べます。

$ git --version

すると、次のようにバージョンが表示されるはずです。

> git version 2.19.0

新コマンドの「switch」と 「restore」 が使えるのは、バージョン2.23からですので、表示されたバージョンがそれ以下の場合は、次の手順でアップグレードしましょう。

◆Mac

Homebrewを使えば、次の一行でバージョンを上げることができます。

$ brew upgrade git

◆Windows

次のコマンドを打ち込みます。

$ git update-git-for-windows

【インストールでエラーが出てしまった場合】

> git: ‘update-git-for-windows’ is not a git command. See ‘git –help’

このような表示が出たら、コマンド「update-git-for-windows」が存在していないという意味です。Git公式サイトから最新のインストーラーをダウンロードして、再チャレンジしましょう。

git switch を使ってみよう

switch コマンドは、ブランチを切り替えることができます。checkout と並べて比較してみましょう。

・ブランチを切り替える

$ git switch [ブランチ名]
$ git checkout [ブランチ名]

・ブランチを新規作成して切り替える

$ git switch -c [ブランチ名]
$ git checkout -b [ブランチ名]
 
f:id:itstaffing:20190617145538j:plain
わかりやすい!「スイッチ」っていう名前の通り、自分が作業するブランチを切り替える(スイッチする)ってことだね。

git restore を使ってみよう

続いて restore コマンドを使ってみましょう。こちらもcheckout と並べて比較してみます。

・作業ディレクトリ上の編集内容を取り消す
(addする前の状態から、直前のコミットの状態に戻す)

$ git restore [ファイル名]
$ git checkout [ファイル名]

・特定のファイルを、特定のコミット時点に戻す

$ git restore --source [コミット識別子] [ファイル名]
$ git checkout [コミット識別子] [ファイル名]
 
f:id:itstaffing:20190617145538j:plain
restoreって、辞書で引くと「復元する」とか「データを元に戻す」っていう意味だって出てきたよ。たしかに、過去のコミットに checkout すると、作業ディレクトリにその時点のデータが復元されるけど、その機能だけ切り出したって感じだね。
f:id:itstaffing:20190617145541j:plain
ちなみに restore はステージングの状態を変更することもできるんだ。reset と並べて比較してみよう。
・ステージしたファイルを、ステージングエリアから下ろす
(addしたあとの状態から、addする前に戻す)

$ git restore --staged [ファイル名]
$ git reset --mixed [ファイル名]

・作業ディレクトリ上の編集内容を取り消したい
(addする前の状態から、直前のコミットの状態に戻したい)

$ git restore --worktree [ファイル名] (※1)
$ git checkout [ファイル名]
$ git reset --hard HEAD(※2)

※1 オプションを指定しない場合は、--worktree をつけたときと同じ動きをします
※2 reset --hard は引数にファイル名を指定できません。ファイル名を指定して reset --hard をしようとすると、fatal: Cannot do hard reset with paths.と注意されてしまいます
f:id:itstaffing:20200130131112j:plain
f:id:itstaffing:20190617145538j:plain
ファイルをまとめて一括で操作したいときはどうすればいいの?ステージングエリアから下ろしたいときに、ファイル名をいちいち指定して下ろすのは面倒だわ。
f:id:itstaffing:20190617145541j:plain
ファイル名の代わりに「.(ドット)」を使えば、すべてのファイルをまとめて操作できるぞ。たとえば
$ git restore .

みたいに使えばよい。

まとめ

今回は、新コマンド switch と restore について学びました。

・ブランチを切り替える

$ git switch [ブランチ名]

・ブランチを新規作成して切り替える

$ git switch -c [ブランチ名]

・作業ディレクトリ上の編集内容を取り消す

$ git restore [ファイル名]

・特定のファイルを、特定のコミット時点に戻す

$ git restore --source [コミット識別子] [ファイル名]


※ switch と restore は、あくまでも実験的なものであり、今後仕様が変わる可能性もあります。

Gitにはまだまだたくさんのコマンドがあります。
次回はファイルの差分を確認できる diff(ディフ)を学びましょう。

参考:Git公式ドキュメント(英語)
・git switch
・git restore


▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」