KaQiita

新米エンジニアが適当なことを書いてます。温かく見守ってやってください。

【git】git のブランチは「枝」ではない

はじめに

社会人の方も学生インターンの方も、エンジニアとして現場に出た際に最初につまずくことの一つに「git の使い方」があるのではないかと感じます。

 

私も初めてエンジニアとして現場に出た際には「git は基本的な使い方はなんとなく分かるけど、たまにエラーが出るとどうして良いか分からなくなる」というような状態でした。

 

自分で色々なドキュメントに当たって調べても、どうも説明がいまいち理解できない、、、そんな状態で苦しみながら勉強を進めていって思ったことがこれです。

 

初心者向け教材の git のブランチの説明はミスリーディングである

 

今日はブランチについて、思ったことを書いていきます。

 

よくある誤解

よくあるブランチのイメージ図

初心者向け教材では、よく上記のような図で「ブランチとは枝です」というような説明がされると思います。

 

恐らく直感的な分かりやすさを重視しているのだと思いますが、この図は非常に紛らわしくて誤解しやすいです。

 

まだ git の勉強をそこまでしていない方が、この図を見た上で以下のような質問に答えるとしたらどう答えるでしょう?

 

branch1 を図示してください

この質問に対して、以前の私はこのような誤解をしていました。

ブランチの誤解

上記のように「ブランチは枝」だと理解していると色々な誤解をします。

 

たとえば、ブランチを削除するために "git branch -D branch1"とターミナルで打ったら、以下のようになってしまうと思うでしょう。

branch1 の削除の誤解

上記のように「コミットが消える」というように思ってしまうのではないでしょうか?

 

少なくとも私はそう思っていました。

 

しかし「コミットが消える」というのは間違っています。

 

「ブランチは枝」という説明からコミットの集合から形成される「枝」をブランチと理解してしまっているせいで「コミットが消える」と誤解してしまいやすいように思います。

 

この他にも、ブランチというものを正しく理解していないと多くのコマンドが行なっていることも誤解してしまいます。

 

git の学習の序盤でブランチについての理解をこのように誤ると、誤解に誤解を重ねていって、あるところで全く理解ができなくなってしまいます。

 

そこで git の理解につまずいている方はブランチは以下のような「ポインタ」だと考えると分かりやすいかと思います。

 

ブランチはポインタである

ブランチはコミットの集合ではなく、以下の図のようなコミットを指し示す「ポインタ」のことです。

ブランチのイメージ図

つまり branch1 とは上図の「青いポインタ」のことです。
 

このように理解しておくと、「ブランチの削除」も正しく理解しやすいです。

 

"git branch -D branch1" とは上記の図が下記の図になるだけです。

ブランチの削除

つまり、コミットは消えたりなんかしません。消えるのはブランチだけです。

 

このようにブランチを「ポインタ」と考えることで、誤解が生まれにくくなります。

 

git reset

reset についてもブランチを枝だと理解していると誤解しやすいです。

git reset の誤解

 "git reset --hard" では以下のようなことが起こると勘違いしてしまいます。

git reset の誤解2

しかし、正しくは以下の通りです。

git reset の正しい理解

こちらもコミットは消えません。

 

詳細な説明は省きますが、git reset は「ブランチが移動しているだけ」です。

 

終わりに

このように、ブランチを枝ではなくポインタと捉えることで「コミットが消える」などの誤解をすることなく、機能を理解することができます。

 

このイメージを持つことで私はとても git の理解が進んだので、是非お試しください!