自分のブランチがmainブランチにマージされていっきに緑になったときは、ちょっと感動( >ω<。)...
そして、この仕様から「Git」の本質的な仕組みの一部が垣間見えます。
デフォルトブランチ(本流)以外へのコミットは草が生えない?
GitHubのマイページトップにある「草」。
ただの11×11pxの正方形なのに、つい緑にしたくなってしまうもの。
ですがこれ、通常はmainやmasterなどにあたるデフォルトブランチ(本流)のコミットは緑になるのですが、デフォルト以外のブランチ(支流)へのコミットだけでは緑化されません。
これではモチベーションにならないし、なんのための草なのかという話です。
では、どうすれば緑化されるのかというと、支流から本流へのPRを出して、それがマージされると、過去のコミットに遡って緑化されます!
これは、1つには、「草 = Contribution」というコンセプトに基づくもので、自分のコードが本流にのったときにはじめて、"Contributionした"といえるという考え方なのだと思われます。
しかしそれだけではありません、この仕様のおかげで学べた「Git」自体の仕様、というか考え方がありました。
main/masterブランチにマージした時点で、それまでのブランチ(例えばfeatureブランチ)で行ったコミットも、すべてmain/masterブランチのコミットにもなるという考え方です。
「ブランチ」は「コミットの集合体」ではない?
これはgithubというよりどちらかというとgitのことになってしまいますが、最終的にmasterにマージすれば全てmasterのcommitとして扱われるという理解で大丈夫ですか? rebaseをあまりわかっていませんが、rebaseのようにmasterで直接commitしているような状態にならなくてもカウントされるのでしょうか?
master ブランチという名前からして、master と名前のついた commit の集合体が定義されているように思われるかもしれませんが、実際には master はある特定の commit 一つを指差しています。 その地点から遡れるだけ遡った結果を、ここでは master ブランチと表現していることとなります。
とすれば、master から遡れる範囲は全て master ブランチの範囲内であると言えるので、どのような形であれ、master から到達できる範囲にある commit は全て対象になると言えるかと思います。
このQ&Aが質問/回答ともに素晴らしくてすごく学ぶこと多いです。
つまり、実際には「ブランチが定義しているのは、ある1つのコミット」であって、一般的に"XXブランチ"と呼ばれるものは、定義された1つのコミットから遡れるあらゆるすべてのコミットを含んでいるということです。
上の図でいうと、黒色の考え方ではなく、青色の考え方ということになります。
rebaseだと、支流で行ったコミットが、mainにマージされたときに、mainブランチのコミットになることは自然に理解できますが、
rebaseでないマージでも、支流で行ったコミットも、mainブランチのコミットになるということです。これはちょっと意識して考えないと、直観だと違って捉えてしまうかもな考え方です。
でも、だからこそ、mainブランチにマージされると、過去に遡って草が生えるんですね!
納得がいく考え方です。
cf.
Special Thanks.
コメント