目次
今回の確認内容
ブランチを作ってチェックアウトします。
git branch
以下のコマンドを実行し、最新のコミットからブランチを作ります。
$ git branch
* master
$ git branch bra20200226
$ git branch
bra20200226
* master
チェックアウトはしていないので、まだMasterを参照しています。このときに.git配下がどのように変わったかを見てみます。
$ tree -a
├── .git
│ ├── logs
│ │ ├── HEAD
│ │ └── refs
│ │ └── heads
│ │ ├── bra20200226
│ └── refs
│ ├── heads
│ │ ├── bra20200226
logsとrefs配下にブランチが作られました。作られたファイルの中身を見てみると、以下のように最新のコミットから作られたことがわかります。
$ cat .git/logs/refs/heads/bra20200226
0000000000000000000000000000000000000000 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1582664128 +0900 branch: Created from master
$ cat .git/refs/heads/bra20200226
2deb1b0751cbfeffdc75683b2f61e476ef970640
$ git cat-file -p 2deb1b0751cbfeffdc75683b2f61e476ef970640
tree e6c5d9e73c33771f1878aa6edc1a5df1939e6351
parent 17e88b45fdb1b3e8831df0c209204f290d6ca614
author Chapa <hoge@hoge.com> 1581171878 +0900
committer Chapa <hoge@hoge.com> 1581171878 +0900
2nd commit. add and modify
git checkout
では、チェックアウトして、.git配下がどのように変わったかを見てみます。
$ git checkout bra20200226
Switched to branch 'bra20200226'
$ git branch
* bra20200226
master
├── .git
│ ├── HEAD
│ ├── index
│ ├── logs
│ │ ├── HEAD
それぞれの中身を見ると以下のようになっています。
$ cat .git/HEAD
ref: refs/heads/bra20200226
$ cat .git/refs/heads/bra20200226
2deb1b0751cbfeffdc75683b2f61e476ef970640
$ cat .git/logs/HEAD
0000000000000000000000000000000000000000 17e88b45fdb1b3e8831df0c209204f290d6ca614 Chapa <hoge@hoge.com> 1580696403 +0900 commit (initial): first commit
17e88b45fdb1b3e8831df0c209204f290d6ca614 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1581171878 +0900 commit: 2nd commit. add and modify
2deb1b0751cbfeffdc75683b2f61e476ef970640 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1582664726 +0900 checkout: moving from master to bra20200226
HEADの参照ブランチが変わりました。参照ディレクトリを見るとどのコミットを参照しているかがわかります。
今回のおさらい
ブランチを作るとオブジェクトとして何かが作られるわけではなく、参照ディレクトリ配下にファイルが作られていきました。チェックアウトすることでHEADの参照先が変わることも確認できました。
次回はブランチでコミットを進めたときにどのように変化していくかを追っていきたいと思います。