Git入門:バージョン管理のきほん
ブランチを作って移動する(switch)
この回でやること
git switch でブランチを作り、行き来する手順を学びます。作業を持ったまま移動しようとして怒られたときの対処まで身につけましょう。
- 読む 約 6 分
名札を増やしただけでは、何も分かれない
前回、ブランチはコミットにつけた名札だと確かめました。ただ、名札を用意しただけでは作業は 1 ミリも分かれません。その名札の上に立って新しいコミットを積んで、初めて枝になります。
いま自分がどの名札の上に立っているかは、git branch の * で分かります。新しい作業を始めるときの基本形は 1 行です。
ターミナル
$ git branch
* main
$ git switch -c feature-login
Switched to a new branch 'feature-login'-c は create の頭文字で、作ってそこへ移動する、をまとめて行います。できた feature-login は、実行した瞬間の main と同じコミットを指しています。出発点は完全に同じで、ここから積むコミットだけが分かれていきます。
すでにあるブランチへ戻るときは -c を外します。直前にいた場所へ戻るだけなら - が使えます。ターミナルの cd - と同じ感覚です。
ターミナル
$ git switch main
Switched to branch 'main'
$ git switch -
Switched to branch 'feature-login'さっき作ったファイルが、消えた
feature-login で login.html を作ってコミットし、main に戻ると、そのファイルが見当たらなくなります。
ターミナル
$ git switch main
Switched to branch 'main'
$ ls
README.md index.html
$ git switch feature-login
Switched to branch 'feature-login'
$ ls
README.md index.html login.html消えたのではありません。main にはまだそのファイルが存在しないので、作業ディレクトリから外されただけです。ブランチを移動すると、手元のファイルは移動先のコミットの中身に丸ごと並べ直されます。戻れば元通りです。
ここで慌てて作り直さないでください。コミット済みの内容は必ずリポジトリの中に残っています。
編集を抱えたまま移動しようとして、止められる
ファイルを直したまま、コミットせずに移動しようとするとこうなります。
ターミナル
$ git switch main
error: Your local changes to the following files would be overwritten by checkout:
index.html
Please commit your changes or stash them before you switch branches.
AbortingGit は「その編集は移動先で上書きされて消える。だから移動をやめた」と言っています。勝手に消さずに止めてくれているので、これは親切なエラーです。逃げ道は 3 つあります。
区切りが良いなら、git add して git commit します。作業ブランチの上なら、途中でもコミットして構いません。いらない編集なら git restore index.html で捨ててから移動します。これは取り消せないので、本当に不要なときだけです。
まだコミットしたくないなら、git stash で一時的に退避してから移動します。
ターミナル
$ git stash
Saved working directory and index state WIP on feature-login
$ git switch main
Switched to branch 'main'移動先に同じファイルが無いか中身が同じ場合は、編集を持ったまま移動できてしまいます。編集はそのまま連れて行かれるので、気づかないうちに別のブランチで作業を続ける事故が起きます。移動の前に git status を打つ癖をつけてください。
- ブランチを作るだけでは何も起きない。
git switchで移動して初めて作業の枝になる - 移動すると手元のファイルは移動先の中身に並べ直される。消えたわけではない
- 編集を抱えたまま止められたら、コミットするか
git stashで退避してから移動する