2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「git checkout」は古いから使うな!

Last updated at Posted at 2025-06-18

社内でgit checkout でブランチを切り替えたり、変更を破棄したりしている方がいたので、git checkoutを使用している方に向けて「checkoutは使わんで!」という内容を書きます。

git checkoutは多機能で怖いから switch, restore使え!

突然ですが、ブランチの切り替えやちょっとした修正の取り消しに、git checkout コマンドを使っていませんか? 手に馴染んだコマンドで、つい指が動いてしまう方も多いかと思います。自分ちょうど一年前まではcheckout使ってました。

ですが、その便利なはずの git checkout には、 意図しない事故を引き起こしかねない「怖さ」 が潜んでいるんです。

checkout の何がそんなに「怖い」のか?

結論から言うと、checkout は役割が多すぎるのが問題です。
このコマンドは、大きく分けて以下の2つの全く異なる操作を実行します。

  • ブランチを切り替える
  • ファイルの変更を元に戻す

「ブランチ操作」と「ファイル操作」という、コンテキストが全く違う作業を同じコマンドが担当しているため、こんな悲劇が起こり得ます。

[怖い話] ブランチ名とファイル名を間違えたら…?

あなたが feature/AB-123 というブランチに切り替えようとして、うっかりこう入力したとします。

# ブランチ名をタイポした
$ git checkout feature/AB-12

もし feature/AB-12 という名前のファイルやディレクトリが過去のコミットに存在した場合、Gitは「お、このファイルの状態に戻したいんだな」と解釈して、あなたの作業ツリーにある同名のファイルを警告なしに上書きしてしまう可能性があります。

安全な新コマンド switchrestoreを使おう

このような事故を防ぐため、Git 2.23から checkout の機能は2つの専門家コマンドに分割されました。

ブランチ操作の専門家 git switch

ブランチを「切り替える(switch)」ことだけに責任を持ちます。ファイル操作は一切行いません。

ファイル復元の専門家 git restore

ファイルの変更を「元に戻す(restore)」ことだけに責任を持ちます。ブランチ操作は一切行いません。
役割が完全に分かれているため、もう間違うことはありません。

まとめ

今日から checkout 依存を卒業しよう!

もちろん、git checkout がすぐに使えなくなるわけではありませんが、コードを守るために、より安全で明確な方法があるなら、それを使わない手はありません。

今日からブランチを移動するときは git switch を、**ファイルの変更を取り消すときは git restore ** を意識して使ってみてください。

皆さんの日々の開発が、少しでも安全で快適になりますように。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?