Gitの基礎の基礎を学んだのでそれをアウトプット④ ~ブランチとマージ(時々リベース)
今回もGitの基礎の基礎をクイズ形式でアウトプット
コマンドとかではなくて、中ってどうなっているの?がメイン。
ブランチって何?
ブランチはコミットファイルを指しているポインタ。
ブランチの中身を見ると、ただのハッシュIDが記載されている。
このハッシュIDの正体がコミットファイル名。(.git/配下見てみるといろいろわかる)
HEADって何?
ワークツリーでブランチを指しているポインタ。
どのブランチを指しているの?ってのが書かれている。
ブランチの切り替え(master -> feature)
$ git checkout feature
ブランチを新規作成して、切り替え(master -> feature2)
$ git checkout -b feature2
マージって何?
二つのコミットファイルを統合する処理。
FastForword、AutoMerge、Conflictの3種類があって、基本はAutoMergeなので下に示すはAutoMerge。
masterにfeatureをマージ
$ git merge feature
普通のコミットと違って、マージコミットは二つのコミット情報を持つ。
マージとリベースって何が違うの?
リベース(rebase)はbaseをreする(=親コミットを書き換える)んだよ。
masterにリベース
$ git rebase master
この後、masterにfeatureをマージすれば、マージと同じような結果になる。
ただ履歴や内部的には異なっており、コミット3は消えてしまう。
また、マージもAutoMergeではなく、FastForwordになってしまう。(※ポインタがfeatureが指しているコミットファイルに変わるだけなので、マージコミットが残らない。。)
ちなみに設定次第で、FastForwordされないようにはできる!!