(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Git】branchを分けてもコミットするまでは枝分かれしていない

スポンサーリンク

はじめに

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は「特定のコミットの状態に移動すること」という説明はよくありますが、ブランチを分けた際に初コミットするまでの動きには注意が必要です。

ブランチの作成は最後のコミット状態を複製している点ブランチを作成するだけではファイルが枝分かれしていない点は覚えておくとどこかで役立つと思います。

以上、ご参考になれば幸いです。