🎉GitLab11.0でSquash&Merge機能がCommunity Editionで使えるようになります！！🎉

# はじめに
世間ではGitHubがMicrosoftに買収されることが決定されたことでなおさらGitLabも注目を浴びていますね。[^1]
今日はそんなGitLabが従来はStarter以上[^2]じゃないと使えなかったSquash&Merge機能が11.0からCommunity Editionで使えるようになるので、一足先にTrialを使ってどんなものなのか確認してみようと思います。

# いつ頃リリースされるの？
[こちら](https://gitlab.com/gitlab-org/gitlab-ce/issues/34591#note_75746903)によると、6/22の11.0のリリースで適用されるようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/644d4c19-0da4-c8cb-7ce5-3cdb7186638a.png)

# Squash&Mergeとはどんな機能なのか
公式の解説は[こちら](http://ec2-52-193-97-231.ap-northeast-1.compute.amazonaws.com/help/user/project/merge_requests/squash_and_merge)
平たく言うと、いくつかのCommitを１つのCommitとしてMergeすることができる機能になります。

## どんなふうに使うの？
仮にサーバの設定ファイルが管理されているリポジトリで
新しく通信先が増えたため/etc/hostsにhoge.comにつながるような設定追加をしたいとします。
このファイルをpushしたGitフローが以下とします。
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/70732/4042db79-4f09-eccb-b854-2463d32ab643.png)

1. hoge.comを追記してWIPでMRを発行
2. レビュー中に実はapi.hoge.comもhostsに設定しないと駄目だと指摘される
3. api.hoge.comをhostsに追記
4. WIPを解除してMerge

肝なのは、本来はhostsファイルの修正は1つのコミットに纏められるのに、
WIPのレビューで指摘されて２回コミットしてしまっている点です。
これは、レビューする人や後にgit logを見る人はコミットの粒度が細かくなりすぎて見づらくなってしまいます。
(※会社やチームによってはgitのコミット粒度は様々なのでこれが絶対的に悪いわけではありません)
こういうシチュエーション時に、MergeRequest時に１つのコミットに見せることが出来るのがSquash&Merge機能というものになります。

# 実際に試してみる
では、Issueを切るところから実際に上記フローで試してみます。

* Issueを切る
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/d615dbe2-dd6b-285e-babd-b9a698f4aa33.png)
* Issueからブランチを作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/02bde409-9975-e692-6712-8f2b0cd62a17.png)
* 赤枠を押してWIPなMergeRequestを作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/30baf131-85c6-eea5-0d02-9342de86e447.png)
Mergeボタンが押せないWIPなMergeRequestが作成される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/a7cb2061-48d6-be4d-2643-89abf08bcb93.png)
* レビューコメントを追記してみる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/f11bf6bb-0430-4641-3ac3-1ac36bfc5c6b.png)
* 指摘の通り再度コミットしてMergeRequestに２つのコミットがされたことを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/a8944868-a666-9dff-0ba5-c9b3a5809ad7.png)
* MergeRequestの「Squash commits」にチェックを入れる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/c46e8c41-8dca-0576-3b77-3ed81f010415.png)
* Mergeした後にMerge元の1-fix-hostsブランチを確認してみる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/67400878-e169-bb5e-4482-69fac436ab8b.png)
* Merge先のmasterブランチではコミットが集約されていることを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/e5188f48-1f30-fae8-fb25-d1b2b7c7a158.png)

# Merge先のMergeCommitから纏める前の詳細コミットを見たい場合
場合によっては、Merge先からこの１つに集約されたコミットはどういう経緯でコミットされたのか確認したい場合があります。
例えば、今回のhostsファイルは実は最初はhoge.comのIPを1.1.1.100で設定したけど、うまくいかなくて1.1.1.1に修正した場合は、纏まった後のコミットからは試行錯誤の経緯が読み取ることができません。
コミットログにどこまで意味を持たせるかは会社やチームによって色々ありますが、
一つの考え方としてはコミットログからも過去の経緯がわかるようにしたいといった場合に有効です。

* masterブランチのMergeCommitを確認し、「See merge request !X」を押す
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/0449f1ba-e92a-2007-3770-126a42b04b0a.png)
* 元のブランチのMergeRequestが確認できるので、ここのCommitsから確認する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70732/d0ddcd20-0f80-2b8f-74e3-2acb8a86cd06.png)

# 最後に
簡単にではありますが、GitLabの今後追加される一機能についてレポートしてみました。
GitLabでは現在は有償機能であっても、GitLabのコアに入れたほうが良いよねっていう場合は今回のようにIssueで意見を募集して取り込まれることが多々あるようです。
今回は言及していませんが、GitLabはCommunityEditionであってもIssue管理、ブランチ戦略、CI/CDの機能などなど本当にたくさんの機能に溢れています。
ぜひGitだけの機能ではなく、GitLabの全機能を使い倒すつもりで色々試されてみてはいかがでしょうか😊

# 注釈
[^1]: [GitLabへのインポートが普段の10倍に急増、GitHubの買収報道で@Publickey](https://www.publickey1.jp/blog/18/gitlab10github.html)
[^2]: [Feature Comparison@GitLab](https://about.gitlab.com/pricing/self-hosted/feature-comparison/)