はじめに
gitでは個人でもブランチを切って複数の作業を並行して行うことが可能ですが、ポイントとしてgit branch test
というコマンドはcp -r master test
ではない、というのは意識する必要があります。
本記事ではgit log --all --graph --pretty=oneline
にてブランチの状況を確認しながらこのあたりの動きを説明しています。
branchのハンズオンと動き
初期ファイルを作成してtestというブランチを作成しました。
$ git init Initialized empty Git repository in ... $ echo a > a.txt $ git add a.txt $ git commit -m "init" [master (root-commit) 1a46137] init 1 file changed, 1 insertion(+) create mode 100644 a.txt $ git branch test
現在のブランチは以下で確認できます。
$ git branch * master test
この状態で以下のようにファイルに修正を加えて
$ echo b > a.txt $ cat a.txt b
ブランチを切り替え
$ git checkout test M a.txt Switched to branch 'test'
以下コマンドでファイルの中身を確認するとどのようになっているでしょうか?
$ cat a.txt
答えは「b」です。
この動きを分かっていない場合は「branchを分けてもコミットするまでは枝分かれしていない」というのを意識する必要があります。
分岐のさせ方
以下コマンドでブランチの状況を見れば一目瞭然で、要はtestとmasterが同じところを見ています。
$ git log --all --graph --pretty=oneline * 1a46137709d88507d6c1400947b43bde406a76a6 (HEAD -> test, master) init
以下のようにコミットして初めて
$ git branch master * test $ echo c > a.txt $ git add a.txt $ git commit -m "fix#1" [test 5da0dde] fix#1 1 file changed, 1 insertion(+), 1 deletion(-)
ブランチは分かれます。
$ git log --all --graph --pretty=oneline * 5da0dde452c1b585a77191c1623ac212934918b7 (HEAD -> test) fix#1 * 1a46137709d88507d6c1400947b43bde406a76a6 (master) init
確かにmasterとtestでコミットしている場所が異なっています。
これでmasterに戻ることで最初のコミット時の状態に戻ってきます。
$ git checkout master Switched to branch 'master' $ cat a.txt a
終わりに
checkoutは「特定のコミットの状態に移動すること」という説明はよくありますが、ブランチを分けた際に初コミットするまでの動きには注意が必要です。
ブランチの作成は最後のコミット状態を複製している点とブランチを作成するだけではファイルが枝分かれしていない点は覚えておくとどこかで役立つと思います。
以上、ご参考になれば幸いです。