# branchとは

**branch(ブランチ)**&#x306F;、gitを使う上でとても大切な概念です。

下図にて説明します。

緑の丸が1つのcommitで、左から1番古いcommitになります。もし**branchを切っていない場合は、main branch**にて作業をしているかと思います。**branch**というのは、**commitのポインタ**で、要は**特定のcommit時点のファイルの状態を指し示すもの**になります。

このgit init時点で存在する**main branch**は大元のbranchで、実際に動いているコードそのものになるかと思います。

その**main branch**のコードを編集せず、複数人で開発していくために、**branchを切って**開発をしていきます。

例えばAさんが**main**から**feature1**というbranchを切って、commitを積んでいき、Bさんが**main**から**feature2**というbranchを切って、commitを積んで行った際に、お互いのファイルを結合したとしても、**main branch**自体は変更がなく、お互いの変更は、**feature1**と**feature2**のbranchを取得することで、確認することができます。また、Aさんが緊急のバグ対応が入り、別の作業をする必要がある場合は、**main**に戻り、そこからbranchを切って作業することで、完全にcommitを分けることができます。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2F3fXaM2vksWfL8MhvCB7h%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-11-25%2013.42.56.png?alt=media&#x26;token=70331c60-bae4-4dd1-8a31-3a1b537527ec" alt=""><figcaption></figcaption></figure>

また、**HEAD**という概念があり、**HEAD**は自分が作業している場所を示すポインタになります。

上記の場合は、**feature1**が今自分が作業している場所ということになります。
