# mergeでのbranchの統合

作業branchにて作業が完了したら 、大元のbranchに変更分を統合するため**merge**を行います。

mergeは、**Fast-foward merge**と、**3way merge**の二種類があります。

## Fast-forward merge

こちらの方法は、取り込みたいbranchのポインタを先に進める方法で、

以下図のように`main`から切った`feature1`があるとして、feature1にてcommitを二つ積んでいるとします。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FmE65jJo3YBdrt3OvygZ6%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-27%2013.13.26.png?alt=media&#x26;token=42ec9a75-192a-4f44-ba40-8104bfc627af" alt=""><figcaption></figcaption></figure>

その変更分を取り込む際に、以下図のように単純に`main`のポインタを`feature1`のcommitに移動する方法になります。ただし、`feature1`を切ったあとに、`main`にてcommitが積まれた場合は、使うことができません。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FwVXHP8B8veIkqrlZffFy%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-27%2013.13.34.png?alt=media&#x26;token=86110e5a-317f-46b3-993c-611f91a8ab54" alt=""><figcaption></figcaption></figure>

## 3way merge

こちらは、大元のbranchと、作業ブランチにてそれぞれcommitが積まれており、それを統合する際に、それぞれの変更分を取り込むcommitを作成し、mergeする方法です。

以下図のように`main`から`feature1`を切った後に、`main`にcommitが積まれ、`feature1`にてcommitを積んでmergeするとします。その際に、branchを切った時点の、main側のA->Bの差分と、feature1側のA->Cの差分を合わせたcommitを作成して、統合する方法になります。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2F3pu3bgIfJX8enzm7Thd9%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-27%2013.23.41.png?alt=media&#x26;token=29d8c4a9-74fc-41cd-b16c-1d5b6289fb6a" alt=""><figcaption></figcaption></figure>

上記2つの方法を説明しましたが、作業branchでの内容が見やすい点、revertする際に楽である点を踏まえて、**3way merge**を使うのが良いかと思います。
