LoginSignup
22
12

More than 3 years have passed since last update.

git checkoutって色んな意味持たせ過ぎじゃない?

Last updated at Posted at 2020-03-23

きっかけ

前回の記事(「こんなことしたい」って時にどんなgitコマンド使えば良いのか?)を書いているときに、
コマンドについて下図のようなお絵かきをして整理していたのですが

コマンドの整理

git checkoutって状況/条件によって挙動が色々ありすぎじゃない?

※ちなみにお絵かきしている途中で同じような物を公式がチートシートとして用意していることに気づきました...

git checkoutの挙動整理

ブランチ名を指定した場合

ローカルブランチに存在する リモート追跡ブランチに存在する git checkoutの挙動
× × ブランチを切り出す
× リモートからブランチをローカルリポジトリ内に持ってくる
参照するローカルブランチを切り替える

ファイル名を指定した場合

ワーキングツリー内の指定したファイルの編集内容をローカルブランチの内容でもとに戻す

チェックアウトという名前の範囲から逸脱していないか?

ブランチを切り出したり、ブランチを切り替えたり、ファイルの編集内容をもとに戻したりと
チェックアウトという名前を付けられていながら、実際にはある意味やりたい放題のコマンドになっている印象が強いです。

(svnをずっと触っていたこともあり)チェックアウトとは、「リポジトリから何かしらを持ってくる」ものだと思っていまいたため、gitを触り始めたときに「???」となったポイントの一つでした

新しいオフィシャル見てみたら新しいコマンドが追加されてた

このやりたい放題のgit checkoutについてgitのオフィシャルを読んでいたら最後のsee alsoにそれっぽい名前のコマンドが書かれていました。

コマンド 内容
git switch Switch branches(ブランチ切替)
git restore Restore working tree files(ワーキングツリー内ファイルの復元)

どうやら去年(2019年)の8月のアップデート2.23.0で追加されたコマンドのようです。
※使っていたgitが2.21.?だったので気づきませんでした……

新コマンド含めて、役割を再整理しよう

やりたいこと 使うコマンド
ブランチ切り出し git branch
ブランチ取得 git checkout
ブランチ切替 git switch
ファイル復元/編集内容取消 git restore

以後こんな感じで整理してコマンドを理解しておけば変なこともないよね?
と思っていたのですが
git switchgit restoreのDESCRIPTIONにこんな記載がありました

THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.

  • これは実験的なコマンドなので、挙動が変わる可能性があるよ

結論

やりたいこと 使うコマンド
ブランチ切り出し git branch
ブランチ取得 git checkout
ブランチ切替 git checkout git switch
ファイル復元/編集内容取消 git checkout git restore
  • コマンドの役割分担的に考えて、少なくともブランチ切り出しはgit branchで良いと思う
  • ブランチ切替、ファイル復元は新コマンド(git switchgit restore)が用意されているが、変更される可能性があるのでしばらくは様子見してgit checkoutを使い続けた方が良さそう

と言う微妙な結論になりました。

新コマンドの注意書きにでは挙動が変更となる可能性という書き方なので、少なくともコマンドがなくなる事はなさそうなので、今後のgitのリリースでgit switchgit restoreがどうなるのか注目しておいたほうが良さそうですね。

22
12
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
22
12